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)


参考地址: