Цель распределения std :: align_storage (стек или куча?)

Я пытался разобраться в дополнении TR1, известном как align_storage. Читая следующие документы N2165 , N3190 и N2140 , я не могу, хоть убей, увидеть утверждение, в котором четко описывается стековая или кучная природа используемая память.

Я рассмотрел реализацию, предоставляемую msvc2010, boost и gcc, все они предоставляют решение на основе стека, основанное на использовании объединения.

Вкратце:

  • Определен ли тип памяти (стек или куча), используемый реализацией выровненного хранилища, или он всегда должен быть основан на стеке?

  • и какой конкретный документ определяет / определяет это?

Примечание: в MSVC10, следующее определение типа выровненного_хранилища, в этом случае, если выровненное_хранилище является автоматической переменной, данные (_Val, _Pad) создаются в стеке:

template 
union _Align_type
{   
   // union with size _Len bytes and alignment of _Ty
   _Ty _Val;
   char _Pad[_Len];
};

Примечание. Это НЕ банальный вопрос. Пожалуйста, попытайтесь понять вопрос, прежде чем размещать ответ.

5
задан 29 December 2010 в 11:35
поделиться