Ich habe versucht, meinen Kopf um den TR1-Zusatz zu bekommen, der als aligned_storage bekannt ist. Beim Lesen der folgenden Dokumente N2165, N3190 und N2140 kann ich für das Leben von mir nicht eine Aussage sehen, wo es klar beschreibt Stapel oder Haufen Natur des Speichers verwendet wird.Zuweisungsziel von std :: aligned_storage (Stapel oder Heap?)
Ich habe mir die Implementierung von msvc2010, boost und gcc angesehen, die alle eine stackbasierte Lösung bieten, die sich auf die Verwendung einer Union konzentriert.
Kurz:
Ist der Speichertyp (Stack oder Heap) von aligned_storage definiert Implementierung verwendet oder ist es immer gemeint basiert stapeln werden?
und, was ist das spezifische Dokument, das das definiert/bestimmt?
Anmerkung: In MSVC10, die folgende ist die Definition der Art des aligned_storage, in diesem Fall, wenn die aligned_storage ein Auto-Variable ist die Daten (_VAL, _Pad) auf dem Stapel erstellt werden:
template<class _Ty, size_t _Len>
union _Align_type
{
// union with size _Len bytes and alignment of _Ty
_Ty _Val;
char _Pad[_Len];
};
Hinweis: Dies ist NICHT eine triviale Frage. Bitte versuchen Sie die Frage zu verstehen, bevor Sie eine Antwort schreiben.
Ich bin mir nicht sicher, ob eine Antwort besser werden kann. Was wäre der Punkt, wenn Daten dynamisch in 'type' zugeordnet würden? Wie könnte das bei der Ausrichtung helfen? – icecrime
@Zenikoder - lesen Sie einfach noch einmal das Zitat aus dem Standard. Und wieder, wenn nötig. :) 'std :: aligned_storage <...> :: type definiert einen POD-Typ mit angeforderter Ausrichtung. Sie können Speicher für diesen Typ auf Stapel oder in dem Heap reservieren, es ist nicht relevant. – atzz
@Zenikoder - es ist nicht implementierungsdefiniert. Es ist benutzerdefiniert. Die von James zitierte Aussage erklärt alles klar genug. – atzz