gpt4 book ai didi

c - 在 x64 处理器上字对齐加载是否比非对齐加载更快?

转载 作者:太空狗 更新时间:2023-10-29 17:18:35 26 4
gpt4 key购买 nike

在 x86/64(Intel/AMD 64 位)处理器上加载在字边界上对齐的变量是否比未对齐的加载操作更快?

我的一位同事认为,未对齐的加载很慢,应该避免。他引用了结构中项目到字边界的填充来证明未对齐的加载速度很慢。示例:

struct A {
char a;
uint64_t b;
};

结构 A 通常大小为 16 字节。

另一方面,documentation of the Snappy compressor声明 Snappy 假设“未对齐的 32 位和 64 位加载和存储很便宜”。根据源代码,这适用于 Intel 32 位和 64 位处理器。

所以:这里的真相是什么?未对齐的负载是否会变慢以及变慢多少?在什么情况下?

最佳答案

我在 Internet 上发现一个随机的人说,对于 486,对齐的 32 位访问需要一个周期。跨越四边形但在同一高速缓存行内的未对齐 32 位访问需要四个周期。跨越多个 缓存行的未对齐等可能需要额外六到十二个周期。

鉴于未对齐访问需要访问多个内存四边形,几乎根据定义,我对此一点也不感到惊讶。我认为现代处理器上更好的缓存性能可以降低成本,但这仍然是需要避免的事情。

(顺便说一下,如果您的代码有任何可移植性...... ia32 和后代几乎是唯一支持未对齐访问的现代架构。例如,ARM 可以在抛出一个异常,在软件中模拟访问,或者只是加载错误的值,这取决于操作系统!)

更新:这是实际去过的人 measured it .在他的硬件上,他估计未对齐的访问速度是对齐的一半。自己去试试吧...

关于c - 在 x64 处理器上字对齐加载是否比非对齐加载更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364159/

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