Die HeapAlloc Funktion, um die Ausrichtung Garantien in der MSDN-Seite ist nicht festgelegt, aber ich bin geneigt, die gleichen Garantien von GlobalAlloc zu denken, dass es haben sollte, die Speicher 8-Byte zurückzukehren ausgerichtet ist garantiert (wenn auch unter Berufung auf undokumentierten Funktionen ist böse); schließlich heißt es explizit, dass Global/LocalAlloc nur Wrapper um HeapAlloc sind (obwohl sie möglicherweise die ersten n Bytes verwerfen, um ausgerichteten Speicher zu bekommen - aber ich denke, dass es sehr unwahrscheinlich ist).
Wenn Sie wirklich sicher sein wollen, verwenden Sie einfach GlobalAlloc, oder sogar VirtualAlloc, dessen Granularität die Seitengranularität ist, die normalerweise 4 KB (IIRC) beträgt, aber in diesem Fall werden Sie viel verschwenden Erinnerung.
Übrigens, wenn Sie den neuen Operator C++ verwenden, wird garantiert, dass der Speicher für den von Ihnen angegebenen Typ korrekt ausgerichtet wird: das könnte der richtige Weg sein.
Wenn MSDN es nicht sagt, dann * gibt es keine Garantie *. Selbst wenn du 1000 Leute fragst und sie alle feststellen, dass es 8 Bytes auf ihrer Maschine sind, ist das keine Garantie, und du solltest dich wahrscheinlich nicht darauf verlassen. –
Ich stimme der obigen Aussage zu. Sie sollten sich vielleicht http://blogs.msdn.com/oldnewthing/archive/2007/12/27/6873648.aspx ansehen, um zu sehen, ob es relevant ist. – torak
Ich stimme zu, es gibt keine Garantien, aber ich fordere hier keine Garantien: Ich frage nach Erfahrung. Ich bin zuversichtlich, Microsoft wird nie die Ausrichtung unter 8 Bytes verringern, weil Doppel nicht mehr lesbar sein wird. Ich würde es gerne wissen, das gilt auch für die Embedded-Plattformen. – Ondergetekende