Как заставить tr1 :: array выделять выровненную память? - PullRequest
4 голосов
/ 25 августа 2010

Вы можете выделить std :: vector, который выделяет выровненную память кучи, определив свой собственный распределитель. Вы можете выделить массив стилей c в стеке, используя функцию declspec align. Но можете ли вы объявить tr1 :: array, который гарантирует, что элемент с нулевым индексом будет выровнен?

1 Ответ

7 голосов
/ 25 августа 2010

tr1::arraystd::array и boost::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 );
...