의외로 int의 크기에 대해서 궁금해하는 분들이 많으신 것 같아서, 간단히 포스팅 해봅니다.
int라 함은 본래 CPU에서 가장 기본적으로 사용하는 데이터 단위의 크기인 WORD와 동일한 크기를 의미합니다. 그리고 WORD의 크기는 16비트 컴퓨터에서는 2 bytes, 32비트 컴퓨터에서는 4 bytes, 64비트 컴퓨터에서는 8 bytes입니다. 그리고 주소를 가리키는 포인터의 크기도 그러합니다.
"윈도우 32 bit 버전에서는 RAM을 4G Byte 이내로만 인식가능하고, 그 이상을 인식하려면 64 bit 버전을 깔아야 한다"라는 이야기를 들어보셨을 겁니다. 바로 주소의 최대크기 차이 때문에 그렇습니다.

그런데, C 컴파일러에서 코딩시 사용하는 int는 호환성을 위해서 4 bytes 크기로 명시되어 있습니다. 그렇기 때문에 int는 4 bytes라고 생각하시면 맞습니다. 그러나 기억하셨으면 하는 것은 원래 int가 4 bytes인 것이 아니라, 그냥 int를 4 bytes 짜리로 간주하고 쓰는 것이라는 점입니다.

사실, 물리적인 메모리 상에서는 int 형이란 것이 따로 존재하지 않습니다. 컴파일러 상에서 int 를 그렇게 정의해서 쓰는 것일 뿐이죠. 그래서 컴파일러마다 다를 수 있습니다.
예를 들면, 윈도우 32bit 버전의 C 컴파일러에서는 long을 int와 같은 크기로 사용하지만, 리눅스 64bit 버전에서는 long 형을 8 bytes로 사용하는 등의 경우가 있는 등의 차이가 그런 것입니다.

'develop' 카테고리의 다른 글

국가 약어 코드 (ISO 639 Language Codes)  (0) 2011.02.07
Eclipse에서 Android 개발시 Proxy 설정하기  (0) 2010.10.15
int의 크기  (2) 2010.08.24
enum과 typedef enum  (12) 2010.08.24
memcpy()  (0) 2010.08.23
삼성 오픈소스 사이트 소개  (0) 2010.08.19
Posted by 찬이
TAG ,

댓글을 달아 주세요

  1. 독천코딩왕 2012.11.29 03:46 신고  댓글주소  수정/삭제  댓글쓰기

    취업 면접에서 int 형 크기와 포인터 크기 때문에 애좀 먹어서 찾아왔습니다.
    위에서 말씀하신대로라면 일반적으로 int의 크기는 word의 크기와 같다고 하셨는데,,,
    포인터 크기의 경우 한번에 액세스 할수 있는 크기와 동일하다고 하여 word와 같은데,
    그럼 int도 그런 이유로 같다고 생각하면 되는 건가요?
    그럼 int와 포인터의 크기가 항상 동일하다고 할수 있나요?

    • BlogIcon 찬이 2012.12.07 13:54 신고  댓글주소  수정/삭제

      답변이 많이 늦었네요.
      컴파일러 자체적으로 크기를 fix 시켜놓은 경우가 아니라면,
      말씀하신대로 (포인터 크기 = word 크기 = int 크기)가 됩니다.
      이것이 일반적인 경우라고 보시면 됩니다.

      주의하실 것이 있다면, PC 환경과 컴파일러가 다른 경우에는 이야기가 달라질 수 있습니다.
      예를 들어, 32비트 윈도우 환경에서 사용하는 16비트 컴파일러라던가 하는 경우처럼 말입니다.
      그리고 word나 int 라는 용어도 운영체제 관점에서 '용어'로서의 이야기와 컴파일러가 처리하기 위한 소스상에서의 것과는 다를 수도 있다는 점도 유의해야 합니다.