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

Alignment, STL vector and bullet physics aligned allocator

本文关键字:对齐 分配器 子弹 STL      更新时间:2023-10-16

当我使用这个时,我想可以肯定地说这些对象是对齐的:

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;

然后赋值,编译器还会对齐我的对象吗?

指针将在的这个向量中连续对齐。对于这些指针所指向的对象,什么都说不出来。它们可以放在任何地方。

就是一个引人注目的例子

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

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

如果您希望"对齐"堆上的N对象,则仍然存在new object_type[N];

您的意思是,元素是否会被连续打包

是的,它们保证是。