본문 바로가기
CS 기초

[CS Basics] 32비트의 주솟값과 메모리 크기

by Dev.Andy 2023. 5. 27.

머리말

글을 쓰게 된 이유

  • 슬랙에서 32비트에 관련된 질문이 올라와서 이에 대한 답변을 정리하면서 블로그를 올리게 되었다.

슬랙에 올린 32비트 컴퓨터에 대한 질문과 나의 답변 이미지
32비트 아키텍처에 대한 Q&A, 답변을 정리하면서 더 명확하게 알게 되었다.

 

질문과 답변

질문

표현의 단위와 용량이 헷갈리고 잘 이해가 안갑니다. 32bit 는 4byte인데, 32bit 레지스터는 2^32로 42억개의 주소를 가질 수 있습니다. 그런데 4byte는 영문 4글자정도 표현이 고작인데 42억개의 주소를 가질 수 있는 용량인 게 무엇인가요?

나의 답변

CPU와 메모리의 구조

CPU와 RAM에 대한 간단한 이미지, 32비트의 CPU와 RAM의 작동 방식을 설명하고 있다.
직접 그려 본, CPU와 RAM의 간략한 구조

  • 이건 컴퓨터 구조에 대해 좀 알아야 이해할 수 있을 것 같습니다. CPU와 메모리의 구조가 어떻게 작동하는지를 봐야할 것 같아요.
  • 한번 그림을 그려봤는데 우선 32비트 아키텍처는, CPU의 레지스터가 처리하는 "주소값의 길이"가 32비트여서 $2^{32}$가지로 표현이 가능합니다. 전구가 32개로 일렬로 나열되어 있어서 꺼짐/켜짐으로 표현할 수 있는 경우의 수라 생각하시면 됩니다.
  • 이진법 32자리는 너무 길어서 편의상 4자리씩 묶어 8자리의 십육진법으로  표현하면 0x00000000 ~ 0xffffffff까지의 메모리 주소를 표현할 수 있죠. (맨앞의 0x는 이 수가 십육진법이라는 뜻입니다.)
  • 그렇다면 메모리(RAM)에서 그 주솟값 하나하나에 1byte의 데이터를 표현할 수 있기에, $32bit * 1byte = 2^2 * 2^{10 + 10 + 10} * 1 byte = 4GB$의 메모리를 가질 수 있습니다.
  • 따라서 약 42억 개의 주소를 가질 수 있으면서, 4GB에 해당하는 메모리를 가질 수 있습니다

실제 예시(C언어)

  • 이제 실제 예시를 들어볼게요.C언어에서 정수 a에 10을 저장했다고 하고, 이를 접근한다고 가정할게요. (C언어에서 int는 4byte입니다)
int a = 10;
  • 그렇다면 레지스터가 임의의 주솟값 0x00012fae의 데이터에 접근하고자 하면 메모리(이후 RAM)의 주솟값 0x00012fae에 있는 주소로 찾아갑니다.
  • (정확히는 int가 4byte라 1byte로 한번에 표현이 안되기에 시작 주소입니다.)
  • 그러면 0x00012fae ~ 0x00012fb2까지 십진수 10에 해당하는 4byte의 정보가 0x0000000a로 저장됩니다.
  • 이를 4개씩 나누어 00, 00, 00, 0a 이렇게 저장됩니다.

 

꼬리말

정리와 복습의 중요성

  • 어렴풋이 알고 있는 개념을 설명하기 위해 직접 그려 보고 정리하면서 더 명확하게 32비트 아키텍처를 알 수 있었다.

'CS 기초' 카테고리의 다른 글

[논리 회로] NOT과 OR, AND, XOR의 구현  (0) 2023.03.31

댓글