You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位系统下包含指针的union大小为何是4字节而非8字节?

问题原因解答
  • 最核心的原因:你运行的是32位编译生成的程序,和你使用的硬件是不是64位没有直接关系。
    64位硬件完全兼容运行32位程序,只要编译时指定生成32位目标,编译器就会按照32位规则处理类型长度:32位模式下int*指针的长度就是4字节,和int类型长度一致,而共用体的大小取所有成员的最大长度,自然最终结果就是4字节。
    常见的触发场景包括:

    Windows平台下Visual Studio默认选择x86编译配置、GCC/Clang编译时加了-m32参数、系统本身安装的就是32位版本的C编译器。

  • 你可以新增一行代码验证当前编译环境的指针长度:
    printf("%zu\n", sizeof(int*));
    
    如果输出为4就可以确认当前是32位编译模式,要得到8字节的结果,只需要切换到64位编译配置即可:VS改选x64编译、GCC/Clang去掉-m32参数替换为-m64。
  • 额外提出现有代码的几处非标准/错误写法:
    1. printf的格式化符使用错误,sizeof的返回值是无符号size_t类型,正确的格式化符是%zu,不要用%d;你写的\m是非法转义字符,换行应该用\n
    2. printf语句末尾遗漏了分号,会直接导致编译报错
    3. void main()是非标准写法,标准C的主函数写法是int main(void),结束时需要返回整数值。

内容的提问来源于stack exchange,提问作者Nish animal69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:06:03