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

关于Interlocked操作与内存对齐的技术疑问(附测试代码)

关于结构体成员对齐与Interlocked操作的疑问解答

首先直接给结论:是的,你这个结构体里的long成员完全满足Interlocked操作要求的32位边界对齐条件。

接下来具体解释:

  • 所谓“对齐至32位边界”,本质就是要求变量的内存地址是4字节的整数倍(因为32位对应4字节)。从你的测试输出能看到,an_S.l的地址比an_S.c大4字节——假设an_S.c的起始地址是X,那an_S.l的地址就是X+4,显然是4的倍数,完美符合32位对齐的要求。
  • 这其实是编译器自动做的结构体成员对齐优化:char类型只占1字节,为了让后面的long(通常是4字节)满足自身的对齐需求,编译器会在c后面自动填充3个字节的空白(也就是所谓的padding),这样l就刚好落在4字节对齐的地址上了。
  • 再补充一点:Interlocked系列操作对对齐的要求,核心是变量地址必须是其自身数据类型大小的整数倍(32位整数对应4字节,64位对应8字节)。不管是用_aligned_malloc手动控制对齐,还是编译器自动帮你做结构体成员对齐,只要满足这个地址倍数要求,就可以安全使用Interlocked操作。
  • 如果你还想进一步确认,也可以加一行代码验证:
    printf("%u", (uintptr_t)&an_S.l % 4);
    
    运行后输出应该是0,这就实锤了地址确实是4字节对齐的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:27