正如我们所知,X86 CPU拥有64位数据总线。我的理解是CPU无法访问任意地址。CPU可以访问的地址是其数据总线宽度的整数倍。为了提高性能,变量应该从(对齐到)这些地址开始,以避免额外的内存访问。32位变量对齐到4字节边界将自动对齐到8字节(64位)边界,这对应于x86 64位数据总线。但为什么编译器将128位变量对齐到16字节边界?而不是8字节边界?
谢谢
让我更具体地说明一下。编译器使用变量的长度来对齐它。例如,如果一个变量长度为256位,编译器将把它对齐到32字节边界。我不认为有任何一种CPU有那么长的数据总线。此外,普通DDR内存每次只传输64位数据,尽管有缓存,但是内存如何填满CPU更宽的数据总线?或者只能通过缓存实现吗?
谢谢
让我更具体地说明一下。编译器使用变量的长度来对齐它。例如,如果一个变量长度为256位,编译器将把它对齐到32字节边界。我不认为有任何一种CPU有那么长的数据总线。此外,普通DDR内存每次只传输64位数据,尽管有缓存,但是内存如何填满CPU更宽的数据总线?或者只能通过缓存实现吗?