고정길이 정수를 사용하는 이유

int는 표준으로 4byte라고 명시되어있지 않다

=> int는 4byte가 아닐 수도 있다!

시스템마다 다른 사이즈를 사용할 수 있다.

어떤 시스템에서도 똑같은 크기를 갖게할 수 있도록 고정길이 정수를 사용한다.

 

여담으로 int는 원래 cpu가 가장 효율적으로 처리할 수 있는 크기를 의미하도록 설계되었다. 32bit 운영체제에서 가장 효율적으로 처리할 수 있는 크기는 4 byte 여서, 32 bit 운영체제에서는 int는 4 byte로 설계되었다.

지금 컴퓨터는 대부분 64 bit 운영체제를 사용하지만 대부분 int 크기가 8 byte가 아닌  4 byte로 사용한다.

그 이유는 

  •  호환성: 이전의 C/C++ 코드의 대부분이 32 bit 환경에서 작성되었고, int 는 4 byte로 대부분 익숙하기 때문
  • 성능: 과거에는 CPU 아키텍처가 데이터 모델과 더 밀접하게 연결되어 있어서 int가 CPU 레지스터 크기와 거의 동일했지만, 현대에는 컴퓨터 아키텍처와 데이터 모델이 분리되어 반드시 동일할 필요가 없어짐
  • 메모리 사용량: 메모리 사용량이 증가하면 캐시성능에 영향을 미칠 수 있으므로 불필요한 크기 증가를 피할 수 있음

stdin.h

#include <stdint.h>

IBM 문서

 

<stdint.h>

<stdint.h> 포함 파일은 너비를 지정하고 해당 매크로 세트를 정의하는 정수 유형 세트를 선언합니다. 또한 다른 표준 포함 파일에 정의된 유형에 대응하는 정수 유형의 한계를 지정하는 매크로도

www.ibm.com

 

고정길이 정수타입

  • int8_t : char
  • int16_t : short
  • int32_t : int
  • int64_t : long long

 

  • uint8_t : unsigned char
  • uint16_t : unsigned short
  • uint32_t : unsigned int
  • uint65_t : unsigned long long

unsigned는 부호없는 정수타입을 나타내는 키워드이다. - 부호를 포함하는 데이터타입에 비해서 약 2배의 양의 범위를 표현할 수 있게 해준다. 

그 외

  • 최소 너비 정수 유형
    • int_least8_t ...
  • 가장 빠른 최소너비 정수 유형 = 해당 크기 이상의 값을 저장할 수 있으면서 해당 플랫폼에서 가장 빠르게 동작
    • int_fast8_t ...
  • 가장 큰 너비 정수 유형
    • intmax_t, uintmax_t

 

+ Recent posts