Boost aligned_allocator的对齐参数是什么意思?
What does the alignment parameter for Boost aligned_allocator mean?
有一个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++标准相同的术语)
[基本。对齐)
对象类型有对齐要求对该类型对象可能所在地址的限制分配。对齐是实现定义的整数值表示连续地址之间的字节数可以分配给定的对象。对象类型强制对齐对该类每一物件的规定;更严格的对齐可以请求使用对齐说明符。
相关文章:
- 通过引用函数传递指针参数是什么意思?
- FFT函数的参数是什么意思
- v8 源代码中 ArrayMap 函数的回调 fn 参数是什么?
- 这个奇怪的函数参数是什么?
- 这个函数的参数是什么?
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- 操作员[]作为成员函数的正确模板参数/参数是什么?
- 这个 lambda 的参数是什么类型?
- 函数upper_bound的参数是什么
- mpi_scatterv中的显示参数是什么?
- 这些额外的参数是什么意思
- ON_LBN_SELCHANGE的参数是什么
- 默认参数模板与可变参数模板:最后一个模板参数是什么
- D3DX11CompileFromFile中的第四个参数是什么
- 在 JavaCV 中传递给 cvFindContours() 的参数是什么?
- 这个向量类中的参数是什么
- fcntl() 中的第三个参数是什么
- 参数是什么意思
- std::vector.resize()中的第二个参数是什么意思
- 此签名中的第二个参数是什么意思