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

What does the alignment parameter for Boost aligned_allocator mean?

本文关键字:参数 是什么 意思 对齐 aligned allocator Boost      更新时间:2023-10-16

有一个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..

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

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

16为字节数。从Boost。对齐文档(使用与c++标准相同的术语)

[基本。对齐)

对象类型有对齐要求对该类型对象可能所在地址的限制分配。对齐是实现定义的整数值表示连续地址之间的字节数可以分配给定的对象。对象类型强制对齐对该类每一物件的规定;更严格的对齐可以请求使用对齐说明符。