0

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

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;

稍后分配,编译器还会对齐我的对象吗?

4

2 回答 2

1

指针将在这个指针向量中连续对齐。对于这些指针指向的对象,无话可说。它们可以放置在任何地方。

一个显着的例子是

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

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

如果你想“对齐”堆上的N个对象,还有new object_type[N];

于 2013-02-11T00:49:20.947 回答
-2

你的意思是,元素会被连续打包吗?

是的,他们保证是。

于 2013-02-11T00:47:28.373 回答