2010-08-25 37 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