gpt4 book ai didi

c++ - 为什么 128 位变量应该与 16 字节边界对齐

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:16 25 4
gpt4 key购买 nike

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

谢谢

让我更具体一点。编译器使用变量的长度来对齐它。例如,如果一个变量的长度为 256 位,Complier 会将其对齐到 32 字节边界。我认为没有任何一种 CPU 具有那么长的数据总线。此外,普通的DDR内存一次只能传输64位数据,尽管有缓存,内存如何填满CPU更宽的数据总线?还是只能通过缓存?

最佳答案

一个原因是 X86 上的大多数 SSE2 指令要求数据 128 位对齐。出于性能原因并避免过于复杂(因此又慢又大)的硬件,本应做出此设计决定。

关于c++ - 为什么 128 位变量应该与 16 字节边界对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com