对齐,STL向量和子弹物理对齐分配器

时间:2013-02-11 00:45:52

标签: c++ performance vector stl alignment

当我使用它时,我想可以说这些对象是对齐的:

std::vector<object_type> vect;

我在子弹物理中发现了一个分配器,我不知道它们是如何工作的。这也提出了关于std :: vector的问题。

在此处的演示中,第42行,http://code.google.com/p/bullet/source/browse/trunk/Demos/BasicDemo/BasicDemo.h#42

btAlignedObjectArray<btCollisionShape*> m_collisionShapes;

类型是一个指针,稍后这些指针被赋予new。它真的能保证对齐吗?如果分配器处理指针,我想是的,但我没有任何分配器知识,除此之外我不知道什么是过时的。

std::vector怎么样?如果我宣布

std::vector<object_type*> vect;

并稍后分配,编译器是否仍会对齐我的对象?

2 个答案:

答案 0 :(得分:1)

指针将在指针的向量中连续对齐。对于这些指针指向的对象,没有什么可说的。它们可能放在任何地方。

一个引人注目的例子是

object_type on_stack;
vect[0] = new object_type;
vect[1] = & on_stack;
vect[2] = new object_type;

其中向量的第一个和第三个元素被赋予指向堆上实例化new的对象的指针,而第二个元素被分配了堆栈上另一个实例的地址。

如果您希望&#34;对齐&#34;堆上的 N 个对象,仍有new object_type[N];

答案 1 :(得分:-2)

你的意思是,这些元素是否会打包连续?

是的,保证会有。