데이터 타입의 크기
C++에서 기본 데이터 타입의 크기는 언어 표준에서 최소 크기만 보장하고, 실제 몇 바이트를 사용할지는 컴파일러와 CPU 아키텍처가 결정한다.

이 표를 자세히 보면 `char`을 제외하고는 기본 유형 준 표준 크기가 지정된 유형이 없다. 이는 타입의 크기가 결정되지 않은 것은 아니고, 모든 컴파일러와 머신에 걸쳐 표준 크기가 존재하지 않다는 것을 의미한다. 그래서 컴파일러가 타입의 크기를 결정한다. 보통 16bit CPU면 `int`는 2byte이고, 32bit CPU이면 `int`는 4byte이다. 다만 64bit CPU라고 `int`가 8byte가 되진 않는데, 이처럼 컴파일러 개발자가 적절하다 싶은 데이터 크기를 지정하여 구현한다(물론 ABI는 맞추어야 함). 이런 타입 크기 지정 방식은 C++ 언어에 현재와 미래에서도 모든 플랫폼에서 최적으로 작동하도록 조정할 수 있는 유연성을 제공한다.
italic으로 표기된 것은 생략되어도 상관없다는 의미이다. 그래서 `signed int`나 `int`나 동일한 의미다.
ABI(Application Binary Interface)란
ABI와 비슷한 이름인 API가 있다. API는 컴파일 전 소스코드 수준에서 인터페이스(ex)함수 시그니처)를 정의하는 반면, ABI는 Application Binary Interface의 약자로, 소스 코드가 아닌 컴파일된 바이너리 수준에서 프로그램, 라이브러리, 운영체제가 어떻게 데이터를 주고받으며 호출하고, 실행할에 대한 약속이다.
ABI가 정하는 규칙을 살펴보면 다음과 같다:

위키피디아를 살펴보면 완전한 ABI라는 가정하에, 서로 다른 운영체제라도 동일한 ABI를 채택한다면 한 번 컴파일된 실행파일이 여러 OS에서 수정없이 그대로 사용가능하다고 한다.
물론 완전한 ABI라는게.. 많은 것을 의미하는 것 같다.
MSV의 X64에 대한 ABI
해당 ABI 규격을 맞추어 컴파일러를 구현해야 컴파일된 바이너리가 올바른 ABI 호환성을 가질 수 있게 된다. 컴파일러는 이 ABI 문서대로 기계어 코드를 생성해야 한다. 이를 통해 OS의 라이브러리 함수와 호환된다.

해당 이미지를 통해 ABI 규칙을 확인할 수 있다.
참고 자료
- https://cplusplus.com/doc/tutorial/variables/
- 따배씨 강의
- https://learn.microsoft.com/ko-kr/cpp/build/x64-software-conventions?view=msvc-170
- https://en.wikipedia.org/wiki/Application_binary_interface
'C,C++' 카테고리의 다른 글
| [C++] int8_t, int_least8_t and int_fast8_t 차이 (0) | 2025.10.05 |
|---|---|
| [C++] std::array (0) | 2025.05.03 |
| [C++] Data Types, Type Modifier (0) | 2025.05.03 |
| [C++] 부동소수점의 암시적 변환(Implicit conversions)과 Usual arithmetic conversions (0) | 2025.02.24 |
| [C++] Bitwise not 연산 (0) | 2025.02.11 |