【问题标题】:Alignment, STL vector and bullet physics aligned allocator对齐、STL 向量和子弹物理对齐分配器
【发布时间】:2013-01-26 02:22:35
【问题描述】:

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

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;

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

【问题讨论】:

标签: c++ performance vector stl alignment


【解决方案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];

【讨论】:

  • 或者只是std::vector&lt;object_type&gt; v(N);
【解决方案2】:

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

是的,他们保证是。

【讨论】:

  • 对象?还是只是指针?因为我不关心对齐指针(或者我应该?)
  • 只有指针。在这种情况下,“元素”是指针类型。对象可以分配到任何地方。
  • 指针也是对象。你容器的元素是连续包装的,我已经说过了。
猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 2012-09-30
  • 2020-08-22
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2011-06-16
  • 2019-02-19
相关资源
最近更新 更多