2010-08-25 60 views
4

你可以通过定义你自己的分配器来分配一个std :: vector来分配对齐的堆内存。 您可以使用declspec对齐在堆栈上分配c样式阵列。 但是你可以声明一个tr1 :: array来保证索引为零的元素将被对齐吗?如何使tr1 :: array分配对齐的内存?

+0

如何对齐你需要的内存是什么?实现通常确保所有对象都对齐。例外是“特殊”类型,如需要128位对齐的SSE向量。 – jalf 2010-08-25 11:42:24

+0

是:新保证返回的内存将被正确对齐(只要所请求的内存足够大以容纳该对象)。所以vector/Array和任何动态分配的内存都会保证与你的对象对齐(只要分配的内存大小等于或大于你的对象)。 – 2010-08-25 19:54:44

回答

7

tr1::array(和std::arrayboost::array)都是POD,因此内容占用的内存与array的内存一致。因此,请分配array,然后根据您的需要构建new

typedef std::tr1::array< MyClass, ary_sz > AryT; 
void *array_storage = aligned_allocation(sizeof(AryT)); 
AryT *ary = new(array_storage) AryT(initial_value); 
+0

你能举个例子吗? – 2010-08-25 10:29:21

+0

@zr:不早说完成;) – Potatoswatter 2010-08-25 10:30:22

+0

@PS:非常感谢您及时准确的答复。 – 2010-08-25 10:37:57