고정길이 정수를 사용하는 이유
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>
고정길이 정수타입
- 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
'C language' 카테고리의 다른 글
전처리지시문, Header Guard (1) | 2024.12.14 |
---|---|
c 구조체, 유니온, typedef, 패딩, 비트필드 (0) | 2024.12.13 |
포인터와 문자열 char v[4] = "ABC" ; vs const char* v = "ABC";는 어떻게 다를까? (0) | 2024.12.12 |
c언어로 shell script 실행하기 (0) | 2024.12.12 |
make 문법, makedepend (0) | 2024.12.11 |