Я пытался поднять голову над добавлением TR1, известным как aligned_storage. При чтении следующих документов N2165, N3190 и N2140 Я не могу на всю жизнь видеть, что в нем четко описывается структура стека или кучи используемой памяти.Выделение Цель std :: aligned_storage (стек или куча?)
Я рассмотрел реализацию, предоставленную msvc2010, boost и gcc, все они предоставляют решение на основе стека, основанное на использовании объединения.
Короче:
ли тип памяти (стек или куча), используемое aligned_storage реализации определяется или он всегда хотел быть складывают на основе?
and, Что такое конкретный документ, который определяет/определяет это?
Примечание: В MSVC10, следующее определение типа aligned_storage, в этом случае, если aligned_storage является автоматической переменной данных (_Val, _Pad) создается на стеке:
template<class _Ty, size_t _Len>
union _Align_type
{
// union with size _Len bytes and alignment of _Ty
_Ty _Val;
char _Pad[_Len];
};
Примечание: Это НЕ тривиальный вопрос. Перед отправкой ответа попробуйте разобраться в этом вопросе.
Я не уверен, что ответ может стать лучше этого. Какой смысл, если бы данные были динамически распределены в 'type'? Как это может быть связано с выравниванием? – icecrime
@ Zenikoder - просто прочитайте цитату из стандарта снова. И снова, если нужно. :) 'std :: aligned_storage <...> :: type' определяет тип POD с запрошенным выравниванием. Вы можете выделить хранилище для этого типа в стеке или в куче, это не имеет значения. – atzz
@ Zenikoder - это не реализация. Он определен пользователем. Заявление, приведенное Джеймсом, объясняет все достаточно ясно. – atzz