)
1. 引言在 C 语言中不同数据类型在内存中占用的字节数并非固定不变而是与编译器的位数32 位或 64 位以及平台密切相关。理解这一点对于内存优化、跨平台开发以及底层调试都至关重要。本文使用sizeof运算符来说明各类型在 32 位与 64 位环境下开辟的内存空间大小。2. 基本类型在 32 位与 64 位下的 sizeof下表列出了常见基本类型在 32 位与 64 位平台下的sizeof结果单位字节类型32 位 sizeof64 位 sizeofchar11short22int44long48long long88float44double88pointer指针482.1 关键差异说明long类型在 32 位下为 4 字节在 64 位下为 8 字节Windows 平台除外Windows 的long始终为 4 字节。指针类型32 位下指针占 4 字节64 位下占 8 字节因为指针存储的是内存地址地址宽度与机器位数一致。3. 用 sizeof 验证以下代码可以在任意平台上打印各类型的sizeof结果#includestdio.hintmain(){printf(char: %zu\n,sizeof(char));printf(short: %zu\n,sizeof(short));printf(int: %zu\n,sizeof(int));printf(long: %zu\n,sizeof(long));printf(long long: %zu\n,sizeof(longlong));printf(float: %zu\n,sizeof(float));printf(double: %zu\n,sizeof(double));printf(int*: %zu\n,sizeof(int*));printf(char*: %zu\n,sizeof(char*));return0;}在 32 位环境下编译运行输出char: 1 short: 2 int: 4 long: 4 long long: 8 float: 4 double: 8 int*: 4 char*: 4在 64 位环境下编译运行输出char: 1 short: 2 int: 4 long: 8 long long: 8 float: 4 double: 8 int*: 8 char*: 84. 结构体与 sizeof结构体的sizeof不仅包含各成员的大小还包含内存对齐padding带来的额外空间。例如#includestdio.hstructExample{charc;// 1 字节inti;// 4 字节doubled;// 8 字节};intmain(){printf(sizeof(struct Example) %zu\n,sizeof(structExample));return0;}在 64 位下虽然成员总大小为 1 4 8 13 字节但由于对齐规则实际sizeof结果为24 字节char后填充 3 字节int后填充 4 字节使double按 8 字节对齐。5. 总结32 位与 64 位的主要区别在于long和指针类型的大小。sizeof是编译期运算符返回size_t类型用%zu格式化打印。结构体的sizeof受内存对齐影响不能简单累加成员大小。跨平台开发时应避免依赖long的具体大小必要时使用int32_t、int64_t等固定宽度类型。