众所周知,X86 CPU拥有64位数据总线.我的理解是CPU无法访问任意地址.CPU可以访问的地址是其数据总线宽度的整数倍.对于性能,变量应从这些地址开始(对齐)以避免额外的内存访问.与4Byte边界对齐的32位变量将自动对齐到8Byte(64位)边界,这对应于x86 64位数据总线.但是为什么编译器将128位变量与16Byte边界对齐?不是8Byte边界?
谢谢
让我更具体一点.编译器使用变量的长度来对齐它.例如,如果变量的长度为256位,则Complier会将其与32Byte边界对齐.我不认为有任何类型的CPU具有那么长的数据总线.此外,常见的DDR存储器一次只传输64位数据,尽管有缓存,但内存如何填满CPU更宽的数据总线?还是仅通过缓存?