x64 Windows下long int类型大小与教程不符的原因咨询
为什么Windows x64下long int大小是4字节而不是8字节?
这不是单纯由x86/x64架构决定的,核心原因是C++标准对long int的大小仅做了最低要求,具体实现由编译器遵循的平台ABI(应用二进制接口)决定,不同操作系统的ABI规范存在差异:
C++标准的最小要求:
short int≥ 2字节int≥short int的大小long int≥int的大小long long int≥ 8字节
所以只要满足sizeof(long int) >= sizeof(int),编译器的实现就是合规的,4字节或8字节都符合标准。
平台ABI的差异:
- Windows系统(无论x86还是x64)的主流编译器(MSVC、MinGW等)遵循Windows ABI,规定
long int和int同为4字节,long long int为8字节。这就是你在两台Windows x64设备上得到4字节的原因。 - 类Unix系统(Linux、macOS等)的x64架构遵循System V ABI,规定
long int为8字节,int为4字节——这很可能是你看的教程所使用的环境,所以输出8字节。
- Windows系统(无论x86还是x64)的主流编译器(MSVC、MinGW等)遵循Windows ABI,规定
你可以在代码里加上long long int lli; cout << "size of long long int" << sizeof(lli) << endl;验证,在Windows x64下它的大小会是8字节,和类Unix环境下的long int一致。
内容的提问来源于stack exchange,提问作者GroundBreakingBat
相关产品推荐
相关产品推荐

