컴퓨터 사이언스
메모리 데이터 저장 방식
마지막 수정
분명 학부생 시절에 배웠던 내용인데, 갑자기 헷갈리기 시작해서 다시 정리한다.
메모리
주소
컴퓨터에서 사용하는 메모리는 주소를 이용해서 값에 접근한다.
이 주소가 가리키는 곳은 1 byte의 데이터가 저장되어 있다.
데이터를 읽는 방향
시작 주소에서부터 1씩 높은 주소로 올라가면서 데이터를 읽는다.
4바이트를 읽어야하면 시작 주소에서부터 시작주소 + 4 까지의 데이터를 읽으면 된다.
리틀엔디안 / 빅엔디안
연속된 값을 저장할 때는 두 가지 방식이 있다.
4byte 정수값(32423523 = 0x01EEBE63)을 기준으로 설명한다.
리틀 엔디안
바이트 단위로 역순으로 저장한다.
| 주소값 | 0x0001 | 0x0002 | 0x0003 | 0x0004 |
|---|---|---|---|---|
| 저장된값 | 0x63 | 0xBE | 0xEE | 0x01 |
빅 엔디안
리틀 엔디안의 반대이다.
| 주소값 | 0x0001 | 0x0002 | 0x0003 | 0x0004 |
|---|---|---|---|---|
| 저장된값 | 0x01 | 0xEE | 0xBE | 0x63 |
왜 리틀엔디안을 사용하는가
사람이 관점에서 보면 빅엔디안이 당연해 보인다.
그런데 대부분의 많은 프로세서는 리틀엔디안을 사용한다.
이는 컴퓨터의 입장에서 연산이 매우 편하기 때문이다.
- 자료형 변환
- 만약 4byte 정수에서 2byte 정수로 형 변환을 해야한다면 낮은 자리에서부터 자르면 된다.
- 빅엔디안이었다면 뒤의 2바이트를 따로 읽어야 하지만, 리틀엔디안은 그냥 시작주소에서 2바이트만 읽으면 된다.
- 산술 연산
- 보통 연산은 낮은 자리에서 높은 자리로 연산이 진행된다.
- 이때 시작 주소가 낮은 자리라면 연산을 진행할 때 메모리 읽는 진행 방향대로 연산할 수 있다.
다만, 네트워크 통신 시에는 빅엔디안 방식으로 통신한다.
32bit, 64bit 컴퓨터
흔히 말하는 32bit, 64bit 컴퓨터는 주소값의 크기를 의미한다.
- 32bit
- 범위 :
0x00000000 ~ 0xffffffff - 개수 : 2^{32}= 4,294,967,296
- 사용가능한 메모리 용량 : 4,294,967,296 Byte \approx 4GB
- 범위 :
- 64bit
- 범위 :
0x0000000000000000 ~ 0xffffffffffffffff - 개수 : 2^{64}= 18,446,744,073,709,552,000
- 사용가능한 메모리 용량 : 18,446,744,073,709,552,000 Byte \approx 16EB (엑사바이트)
- 범위 :