컴퓨터 사이언스

메모리 데이터 저장 방식

마지막 수정

분명 학부생 시절에 배웠던 내용인데, 갑자기 헷갈리기 시작해서 다시 정리한다.

메모리

메모리 설명 이미지

주소

컴퓨터에서 사용하는 메모리는 주소를 이용해서 값에 접근한다.
이 주소가 가리키는 곳은 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 (엑사바이트)