C 在不同字长的不同平台上,各类型数据有不同的长度(数据模型),那么多数据模型很难记的住。根据目前流行的 Windows、macOS、Linux 三大平台,整理出个常用模型的表格(单位 bit ):
数据模型 | ILP32 |
LP64 |
LLP64 |
---|---|---|---|
sizeof(char) |
8 | 8 | 8 |
sizeof(short) |
16 | 16 | 16 |
sizeof(int) |
32 | 32 | 32 |
sizeof(long) |
32 | 64 | 32 |
sizeof(long long) |
64 | 64 | 64 |
sizeof(void*) |
32 | 64 | 64 |
平台 | Win32 , x86 macOS , x86 Linux |
x86_64 macOS , x86_64 Linux |
Win64 |
注意:
- 所谓
ILP32
,也就是 I (int)、L (long)、P (pointer) 是 32 bit; - 所谓
LP64
,也就是 L (long)、P (pointer) 是 64 bit; - 所谓
LLP64
,也就是只有 LL (long long)、P (pointer) 是 64 bit; long long
其实就是int64
(顾名思义,64 bit),在严格意义上它是非标准的数据类型;- 不确定的时候,一定要用物理机
sizeof()
直接操作试验 >_<
另外,根据 ISO C 的规定,数据类型长度应该满足这个关系:sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = sizeof(size_t)
参考地址: