2013-02-11 46 views
0

當我用這個,我想這是肯定地說這些對象對齊:對齊,STL向量和Bullet物理對準分配器

std::vector<object_type> vect; 

我看到子彈物理學一個allocator,我不知道如何他們工作。這也引發了關於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; 

,後來分配,將編譯器仍然對準我的對象?

+0

問題非常相似,http://stackoverflow.com/questions/9053157/will-this-code-make-那些矢量對齊 – 2013-02-11 00:48:00

+0

什麼對齊? 4字節對齊? 8字節對齊? 4KiB對齊?或者你濫用術語對齊? – delnan 2013-02-11 00:48:46

+0

對齊用於緩存目的 – jokoon 2013-02-11 01:06:54

回答

-2

你的意思是說,是否連接包裝

是的,他們保證是。

+0

對象?或只是指針?因爲我不關心對齊指針(或者我應該?) – jokoon 2013-02-11 01:05:10

+0

只有指針。這種情況下的「元素」是指針類型。對象可以分配到任何地方。 – 2013-02-11 01:07:51

+0

指針也是對象。你的容器的元素是連續打包的,這就是我已經說過的。 – 2013-02-11 12:00:49

1

指針將在指針的此向量中連續對齊。對於這些指針指向的對象,什麼都不能說。它們可以放置在任何地方。

一個突出例子是

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

其中向量的第一和第三元件被分配指針與new在堆上實例化的對象,而第二個元素被分配又一實例的地址上堆棧。

如果你想「對齊」堆上ñ對象,還有new object_type[N];

+0

或者只是'std :: vector v(N);' – 2013-02-11 12:01:32