Hardware ist komplex; Dies ist eine vereinfachte Erklärung.
Ein typischer moderner Computer kann einen 32-Bit-Datenbus haben. Dies bedeutet, dass jeder Abruf, den die CPU durchführen muss, alle 32 Bits einer bestimmten Speicheradresse abruft. Da der Datenbus nichts kleiner als 32 Bit holen kann, werden die niedrigsten zwei Adressbits nicht einmal auf dem Adressbus verwendet, so dass es so ist, als wäre der RAM in eine Sequenz von 32 Bit Worten statt 8-Bit organisiert. Bit Bytes.
Wenn die CPU einen Abruf für ein einzelnes Byte durchführt, liest der Lesezyklus auf dem Bus 32 Bits, und dann wird die CPU 24 dieser Bits verwerfen und die verbleibenden 8 Bits in ein beliebiges Register laden. Wenn die CPU über einen 32 Bit-Wert holen will, die nicht auf einem 32-Bit-Grenze ausgerichtet ist, hat es mehrere allgemeine Möglichkeiten:
- auszuführen zwei separate Lesezyklen auf dem Bus, um die entsprechenden Teile des zu laden, Datenwort und sie wieder zusammensetzen
- lesen Sie das 32-Bit-Wort an der Adresse durch das Wegwerfen der niedrigen zwei Bits der Adresse
- lesen Sie einige unerwartete Kombination von Bytes in einem 32-Bit-Wort zusammengebaut, wahrscheinlich nicht die Sie gesucht
- werfen Sie eine Ausnahme
Verschiedene CPUs, mit denen ich gearbeitet habe, haben alle vier dieser Pfade genommen. Im Allgemeinen ist es für eine maximale Kompatibilität am sichersten, alle n-Bit-Lesevorgänge auf eine n-Bit-Grenze auszurichten. Sie können jedoch sicher Verknüpfungen verwenden, wenn Sie sicher sind, dass Ihre Software in einer bestimmten CPU-Familie mit bekanntem nicht ausgerichteten Leseverhalten ausgeführt wird. Und selbst wenn unausgerichtete Lesevorgänge möglich sind (wie bei CPUs der x86-Familie), sind sie langsamer.
http://www.ibm.com/developerworks/library/pa-dalign/ – KawaiKx
* die niedrigsten zwei Adressbits werden nicht einmal auf dem Adreßbus verwendet * Wenn ja, wie wird die 32-Bit-Adresse mit nur 30 adressiert? Bit? Korrigiere mich Wenn ich falsch liege. –