对齐,STL矢量和子弹物理对齐分配器
Alignment, STL vector and bullet physics aligned allocator
当我使用这个时,我想可以肯定地说这些对象是对齐的:
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];
您的意思是,元素是否会被连续打包?
是的,它们保证是。
相关文章:
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 64位机器上的C++内存对齐
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 使 std::vector 分配对齐内存的现代方法
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 在 64 位边界上对齐C++结构数组?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 在 capnp FlatArrayMessageReader 的对齐内存缓冲区中接收 zmq 消息
- 是否值得对齐变量?
- 初始化派生结构的基部分/意外打包派生结构字段以对齐基结构的间隙
- 对齐和对齐的实际用例C++关键字
- 如何减少代码的运行时间以对齐文本?
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- Linux C++ 中的页面对齐内存分配
- C 分配器的STD :: Align_val_t的有效对齐值是多少
- 使用带有自定义对齐分配器实现的最新g++,使用SSE和-O3选项编译时出现非法指令(核心转储)
- 分配32字节对齐内存的分配器
- 对齐,STL矢量和子弹物理对齐分配器