Ist es wichtig, was die Wahl von "T" ist?C++

Programme in C++. Entwicklerforum
Guest
 Ist es wichtig, was die Wahl von "T" ist?

Post by Guest »

Ein std :: vector enthält einen Zeiger auf einen heap-zugezogenen Puffer. garantiert korrekt ausgerichtet für den Typ -Zeichen oder wird er auf einen gemeinsamen Wert ausgerichtet, z. B. 4 oder 8 Bytes? (Oder ist es nicht spezifiziert?)
, 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
Dieser Die Funktion ist erforderlich, um einen Zeiger zurückzugeben, der angemessen auf ein Objekt der angeforderten Größe verweist. /> Für ein Objekt mit Breite 1 -Byte würde dies anscheinend darauf hindeuten, dass ein Adresswert akzeptabel ist. Akzeptabel. Soweit ich weiß, gibt es keine Anweisung, einen 3 -Byte -Wert aus dem Speicher in x86 zu laden. Was passiert, wenn Sie neue [t] anfordern, wobei t eine 3 -Byte -Wide -Struktur ?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post