Hallo Wolfgang
und zwar mach ich grad nen PC-Kurs (Fernschule), staatlich anerkannt usw.
Heisst sicher Fernschule, weil die Erklärungen etwas fern der Praxis sind
.
Die ernsthafte Erklärung ist am ENDE des Textes!
Nun mein Problem:
Ich versteh das ganze mit der integralen Adresse nicht. Hat ja auch was mit programmieren zu tun (ich wusste nicht, wohin sonst mit der Frage).
-
warum wird ein integrale Adresse auch integrale Grenzte genannt
-
Warum ist die integrale Adresse eines 32-bit-Wortes durch 4 teilbar (steht so im Text, dass es durch 4 teilbar ist)
-
Auszug: „Sind Informationsstrukturen so gespeichter, dass sie diese integralen Grenzen überlappen, so führt der i486 für jede Doppelwortüberlappung einen zusätzlichen Buszugriff aus. Das bedeutet
naturgemäß eine Leistungsminderung.
Deshalb sollten Datenstrukturen, die für die Verarbeitungsleistung maßgeblich sind, an integralen Adressen gespeichert werden.“
Wie soll das durch eine integrale Adresse verhindert werden?
Also normalerweise wird das ganze mit ALIGN (ausrichten) bezeichnet und das Problem existiert nicht nur beim i486.
Also wenn du einen Prozessor mit einem 8-Bit Daten-Bus hast, dann hat jedes Byte eine eigene Adresse und der Prozessor muss für jedes Byte einen Speicherzugriff machen und das Problem existiert gar nicht!
Hast du aber einen Prozessor mit einem 16-Bit Bus so kann der Prozessor 2 Bytes auf einmal lesen. Der Speicher wird also nicht mehr nach Bytes adressiert, sonder ist in sogenannten WORTEN (hier 16Bit/Wort) organisiert.
Also Speicher-Adresse 0000 und 0001 bilden das erste WORT, 0002 und 0003 das nächste…
Willst du nun einen 16-Bit Wert aus dem Speicher lesen so gibt es 2 möglichkeiten, entweder es sind beide Bytes im gleichen Wort abgelegt (dein 16-bit Wert ist an einer geraden Adresse abgelegt; die Adresse ist also restlos durch 2 teilbar), dann ist das mit einem Zugriff erledigt oder aber das 1. Byte ist an Adresse 0001 und das 2. an 0003, dann muss der Prozessor 2 Speicherzugriffe machen und das braucht eben die doppelte Zeit.
Bei einem 32-Bit Bus ist dann die optimale Speicher-Adresse für einen 32-Bit Wert restlos durch 4 teilbar.
Normalerweise ist der Linker dafür verantworlich dafür zu Sorgen, dass die Variablen richtig an den Speicheradressen ausgerichtet werden.
Das ganze ist übrigens hautsächlich ein Intel-Problem, da ja MS-DOS für einen 8-Bit Prozessor geschrieben wurde, aber auch noch auf einem Pentium lauffen muss.
Andere Prozessoren erlauben es gar nicht erst z.B. 16-Bit Werte auf ungeraden Adressen abzulegen.
MfG Peter(TOO)