小编iqa*_*ple的帖子

为什么128位变量应该与16Byte边界对齐

众所周知,X86 CPU拥有64位数据总线.我的理解是CPU无法访问任意地址.CPU可以访问的地址是其数据总线宽度的整数倍.对于性能,变量应从这些地址开始(对齐)以避免额外的内存访问.与4Byte边界对齐的32位变量将自动对齐到8Byte(64位)边界,这对应于x86 64位数据总线.但是为什么编译器将128位变量与16Byte边界对齐?不是8Byte边界?

谢谢

让我更具体一点.编译器使用变量的长度来对齐它.例如,如果变量的长度为256位,则Complier会将其与32Byte边界对齐.我不认为有任何类型的CPU具有那么长的数据总线.此外,常见的DDR存储器一次只传输64位数据,尽管有缓存,但内存如何填满CPU更宽的数据总线?还是仅通过缓存?

c c++ x86 assembly memory-management

5
推荐指数
2
解决办法
926
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

memory-management ×1

x86 ×1