gpt4 book ai didi

c++ - Boost aligned_allocator 的对齐参数是什么意思?

转载 作者:行者123 更新时间:2023-11-30 02:36:30 25 4
gpt4 key购买 nike

有一个 Boost 教程提供了大约以下代码,针对我的问题稍作修改:

#include <boost/align/aligned_allocator.hpp>
#include <vector>
int main()
{
std::vector<int, boost::alignment::
aligned_allocator<int, 16> > v(100);
}

在这个例子中,给定的对齐参数为 16。这是表示16字节对齐,还是16*sizeof(int)字节对齐?

最佳答案

它将代表 16 个字节的对齐方式。

在某些处理器上,访问非对齐的内存地址会导致异常。在其他情况下,非对齐内存访问可能有效,但可能不是最佳选择,可能需要在对齐地址处额外读取内存。实际需要或期望的对齐因上下文而异。

例如,在 32 位 x86 处理器上,一次 32 位(4 字节)非对齐访问可能导致两次对齐内存访问。如果在地址 1 处读取 4 字节,处理器可能需要读取字节 0..3,然后读取字节 4..7,然后将字节 1..4 合并到结果中,丢弃额外数据阅读。

对于 SIMD 指令,对齐更大。 64 位 MMX 指令应该访问 64 位(8 字节)对齐的内存。 128 位 XMM 指令应该访问 128 位(16 字节)对齐的内存。

在 SPARC 处理器上,未对齐的内存访问会导致处理器异常。我相信 ARM 也会为未对齐的访问生成异常。在 x86 上,您在某些情况下也会遇到异常。特别是,如果堆栈没有正确对齐,可能会导致程序崩溃。通常由编译器处理的细节。

关于c++ - Boost aligned_allocator 的对齐参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599788/

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