Was ist ein falsch ausgerichteter Zeiger?

Lesezeit: 1 Minute

Benutzer-Avatar
gpuguy

Ich verstehe, dass wir in der folgenden Zeile versuchen, an eine ungültige Speicherstelle zu schreiben. Aber das ist eigentlich auch ein falsch ausgerichteter Zeiger. Kann jemand erklären, was ein falsch ausgerichteter Zeiger ist und wie der folgende falsch ausgerichtete Zeiger ist?

*(int*)0xffffffff = 0xbad;

  • Zeiger in einigen Architekturen müssen auf bestimmte Grenzen fallen, z.Beine 32-Bit-Wortgrenze, so dass in diesem Fall die unteren 2 Bits des Zeigers Null sein müssten.

    – Schleicher

    25. November 2013 um 0:44 Uhr

Benutzer-Avatar
Vorlagentypdef

Viele Architekturen haben ein Konzept namens Ausrichtung wobei die Hardware so ausgelegt ist, dass sie mit Adressen arbeitet, die ein Vielfaches der Wortgröße sind. Auf einem 32-Bit-Prozessor könnten Objekte beispielsweise an 32-Bit-Grenzen (4 Bytes) ausgerichtet sein, und auf einem 64-Bit-Prozessor könnten Objekte an 64-Bit-Grenzen (8 Bytes) ausgerichtet sein. Ein ausgerichteter Zeiger ist einer, der auf eine Adresse zeigt, die ein Vielfaches der Wortgröße ist, und ein nicht ausgerichteter Zeiger ist einer, der nicht auf eine Adresse zeigt, die ein Vielfaches der Wortgröße ist.

Auf den meisten Architekturen erleidet das Lesen oder Schreiben von nicht ausgerichteten Zeigern eine Art Strafe. Bei einigen Prozessoren führt dies zu einem Busfehler, der das Programm normalerweise sofort beendet. Bei anderen, wie z. B. x86, sind nicht ausgerichtete Lese- und Schreibvorgänge zulässig, erleiden jedoch Leistungseinbußen aufgrund der Struktur der Hardware.

In deinem Code, 0xFFFFFFFF = 232 – 1 ist wahrscheinlich nicht ausgerichtet, da es kein Vielfaches der gängigsten Wortgrößen ist (es ist nicht durch eine andere Zweierpotenz als 2 teilbar0).

Hoffe das hilft!

1054850cookie-checkWas ist ein falsch ausgerichteter Zeiger?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy