, um beispielsweise zu erklären, ist der Standard -Allokator neu . Das Aufrufen neuer kann eine beliebige Speicheradresse zurückgeben. Aber ist es wirklich willkürlich? Ausgerichtet für den Typ T in std :: vector verwendet? (Dies scheint die wahrscheinlichste Optionen zu sein.) < /Li>
[*] Vielleicht ist die zurückgegebene Adresse willkürlich und kann einen Wert haben. (Ich denke nicht, dass dies richtig ist.) < /Li>
Etwas anderes? ist, dass ich wissen möchte, ob ich die in diesem Speicherblock enthaltenen Bytes als andere Typen sicher neu interpretieren kann, z. >
In die andere Richtung ist die Situation offensichtlicher. (Ich denke - korrigieren Sie mich.)
Zum Beispiel, wenn wir nach einem std :: vector fragen, dann wird der Zeiger von der Speicherzuweisung zurückgegeben und vom STD :: Vector -Objekt gehalten, wäre 8-Byte ausgerichtet. Br />
Code: Select all
char*
- Richtig ausgerichtet (4-byte ausgerichtet) Float
- Richtig ausgerichtet (8-byte) Double
- Richtig ausgerichtet (2-byte) Unsigned Short int
- ... etc
< /ul>
Wenn die Zuweisung für std :: vector eine Speicheradresse von 1025 (Dezimal) zurückgeben kann, ist dies eindeutig nicht garantiert als garantiert es bei jedem Offset korrekt ausgerichtet, wenn sie neu interpretiert werden, als jeder Typ größer als 1 Byte breit. Kennen Sie in den Kommentaren, ob etwas davon nicht richtig sinnvoll ist oder richtig zusammenpasst. > Ich habe vielleicht eine Antwort darauf gefunden, aber ich bin mir nicht sicher, wie ich das interpretieren soll, was ich gelesen habe. > - https://en.cppreference.com/w/cpp/memor ... erator_new