Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.10.2008, 07:43

Wozu existiert Speicherausrichtung?

Moin Leutz! 8)

Es sollte ja einigen bekannt sein, dass zum Beispiel bei der x86 Architektur ints immer an Adressen liegen (sollten),
die durch 4-Bytes ohne Rest teilbar sind, weil so die Prozessoren den int in einem einzigen Speicherzugriff lesen können.

Aber warum ist das so?
Was hindert die CPU daran, den int zum Beispiel an der Adresse 0x00000006 in nur einem Zugriff zu lesen? :roll:

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

16.10.2008, 08:41

Re: Wozu existiert Speicherausrichtung?

Zitat von »"PS3-690"«


Was hindert die CPU daran, den int zum Beispiel an der Adresse 0x00000006 in nur einem Zugriff zu lesen? :roll:


Im Falle des x86 hindert die CPU, in dem Fall, garnichts. Der Zugriff ist aber dann im allgemeinen langsamer.
@D13_Dreinig

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

16.10.2008, 14:29

Re: Wozu existiert Speicherausrichtung?

Zitat von »"PS3-690"«

Moin Leutz! 8)

Es sollte ja einigen bekannt sein, dass zum Beispiel bei der x86 Architektur ints immer an Adressen liegen (sollten),
die durch 4-Bytes ohne Rest teilbar sind, weil so die Prozessoren den int in einem einzigen Speicherzugriff lesen können.

Aber warum ist das so?
Was hindert die CPU daran, den int zum Beispiel an der Adresse 0x00000006 in nur einem Zugriff zu lesen? :roll:

Das hängt ganz stark von der Implementierung der Speicherarchitektur und des Prozessors ab.
Je nach Architektur werden z.B. nur 32 bit große "Pakete" über den Bus übertragen, welche vom Memory Controller auch so gelesen werden. d.h. er kann 0x00000000 lesen und 0x00000004, aber dazwischen muss der Prozessor improvisieren und die Inhalte beider Adressen anfordern um den Wert zusammenzustellen.

Ist etwas "lasch" Ausgedrückt, aber bitte korregiert mich, falls ich hier falsch liege.. ich bin nicht so der Experte was x86 angeht, ich übertrage hier mein Wissen vom Cell Prozessor.
Bei dem sieht das ganze noch komplexer aus, da der Rambus XDR Controller nur komplette cachelines überträgt, und erst die volle Geschwindigkeit erreicht wenn über mehrere Cachelines hinweg Daten verarbeitet werden damit alle Speicherkanäle ausgenutzt werden.

Edit: Um deine Frage "Warum ist das so?" zu beantworten:
Das liegt an der Implementierung, das kann von Architektur zu Architektur unterschiedlich sein und hat meist technische Gründe. Wenn du das genauer wissen willst solltest du nach Literatur zum Thema Mikroprozessoren, Prozessorarchitektur, etc suchen, vielleicht steht auch etwas dazu im Intel Reference Manual.

Werbeanzeige