Forum: PC-Programmierung Was ist "4-byte boundary"?


von Marcus (Gast)


Lesenswert?

Hallo, kann mir jemand erklären was folgender Satz bedeutet, "the 
readbuffer must be on 4-byte boundary". Die einzelnen Wörter sind mir 
klar, nur was bedeutet der Ausdruck "4-byte boundary" für die größe 
meines readbuffers ?

Danke.

Marcus

von Karl H. (kbuchegg)


Lesenswert?

Marcus wrote:
> Hallo, kann mir jemand erklären was folgender Satz bedeutet, "the
> readbuffer must be on 4-byte boundary". Die einzelnen Wörter sind mir
> klar, nur was bedeutet der Ausdruck "4-byte boundary" für die größe
> meines readbuffers ?

Für die Größe normalerweise nichts, aber für die Ausrichtung.
Das bedeutet im Regelfall, dass die Startadresse des buffers
ganzzahlig durch 4 teilbar sein muss.

von Mike (Gast)


Lesenswert?

Hallo,
4-byte boundary bedeutet, dass die Anfangsadresse deines Buffers durch 4 
teilbar sein muss, z.B. 0x0, 0x8, 0x1234FEDC usw.
Vermutlich handelt es sich um einen 32-bit Prozessor der die Daten nur 4 
byte weise bewegen kann. Es ist daher sehr wahrscheinlich, dass auch die 
Buffergrösse ein Vielfaches on 4 sein muss. Lies noch mal genau im 
Datenblatt nach. Welcher Prozessor ist es denn ?

Gruss
Mike

von Lis (Gast)


Lesenswert?

hallo,

ich suche verzweifelt nach den unterschied zwischen 1-byte boundary und 
8-byte boundary...
leider kann ich nichts finden.
kann mir jemand von euch einige vor- bzw. nachteile nennen?

lg lis

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

8 Byte-boundary heißt, der Speicher ist byteweise duchnummeriert, aber 
der Prozessor kann nur 64 Bit breit, also alle 8 Byte zugreifen. Deshalb 
muß die Adresse durch 8 teilbar sein, oder anders gesagt die unteren 3 
Bit der Adresse sind Null.

von Oops (Gast)


Lesenswert?

Hallo Lis,

die Frage ist ein wenig seltsam gestellt.

Nach der obigen Erklärung sind 1-byte-boundary und 8-byte-boundary eben 
einfach nur 1-Byte-Grenzen und 8-Byte-Grenzen. Nichts weiter.

Wesentlich sind die folgenden drei Punkte:

1. Welche Adressierungsarten bietet der Prozessor bzw. wie ist die 
Hardware des Prozessors intern gestaltet, die den Datenzugriff ausführt?

2. Wie ist Speicherzugriff in der Hochsprache unter berücksichtigung von 
Punkt 1 realisiert?

3. Wie sind die zu verarbeitenden Daten strukturiert?

Zum Beispiel könnte ein 32-Bit Prozessor mit 8-Bit Datenbus sehr 
wahrscheinlich Adressierungsarten und HW zum Zugriff haben, die auf 4 
Byte-Zugriffe optimiert sind. Das könnte auch beinhalten, das die 
unteren 2 Bits der Adresse garnicht für den Programmierer zugänglich 
sind und damit Daten immer 32 Bit lang und grundsätzlich an 
4-Byte-Boundaries ausgerichtet sein müssen. Eine entsprechende 
Hochsprache für diesen Prozessor könnte 8 oder 16 Bit Daten emulieren, 
indem es zwar den 4-Byte-Zugriff benutzt (eine andere Möglichkeit gibt 
es in diesem theoretischen Beispiel ja nicht) die jeweils irrelevanten 
Bits aber durch zusätzliche Assembler-Befehle aber löscht (oder beim 
Schieben der relevanten Bits überschreibt). Diese gesparten 2 Adressbits 
könnte ein Prozessorhersteller als Vorteil sehen.

Eine Entscheidung für irgendeine der n-bit-boundaries ist also 
hauptsächlich von dem Prozessor abhängig und steht Dir nicht einfach 
frei.
Sie ist eine Konsequenz der Architektur.

Für den Programmierer hat eine vorhandene Grenze an sich weder Vor- noch 
Nachteile. Solche Fragen machen erst im Zusammenhang mit einem konkreten 
Algorithmus bzw. einer konkreten Datenstruktur Sinn.

Es mag z.B. sein, das Input-Daten keine homogene Struktur haben. Also 
etwa unregelmäßig mal 1 Byte und mal 2 Byte lang sind. Wenn der 
Prozessor nur auf an 2-Byte-Boundaries ausgerichtete Daten zugreifen 
kann oder dies am effizientesten kann (oder das durch mehrere Befehle 
emuliert wird) wäre es sinnvoll sich darüber Gedanken zu machen die 
Eingangsdaten umzustrukturieren. Es ist also auch hier die 
Prozessorarchitekur relevant.

Hoffe das hilft Dir weiter.

Gruss
Oops

von Lis (Gast)


Lesenswert?

Hallo,

Danke für die antworten! Helfen auf jeden fall mal weiter...

Um genauer drauf einzugehen – ich möchte ein programm von 1-byte 
boundary auf 8-byte boundary ändern. Dafür würde ich gerne die zwei 
boundary arte gegenüberstellen (vor- und nachteile, unterschiedlich in…) 
– leider find ich nicht viel darüber (wie schon erwähnt).
Den groben unterschied zwischen 1- und 8-byte boundary kenn ich … aber 
das wars dann auch schon….

Kennt jemand einen guten link oder literatur ?

Lg lis

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


von Oops (Gast)


Lesenswert?

Also ehrlich Lis,

ich bin ein wenig frustriert die selbe Frage von Dir nochmal zu lesen.
Lies doch bitte mal was ich geschrieben habe und die Links die Dir 
Christoph freundlicherweise herausgesucht hat.

Denk nur daran, das zwei Dinge ne Rolle spielen: Prozessorarchitektur 
und Datenstruktur.

Je nach Ausprägung der beiden Faktoren kann 8 gegenüber 4 ein Vorteil 
oder ein Nachteil sein. Da kann man keine allgemeinen Aussagen drüber 
machen. Deswegen findest Du da auch keine Tabelle im Netz, die Vor- und 
Nachteile von 1 bis n gegenüberstellt. Ausserdem hängt die Antwort noch 
davon ab, was Du machen willst. Für den Prozessorarchitekt kann 
diesselbe Wortbreite ein Vorteil sein, die für den Programmierer ein 
Nachteil ist. Wenn Du 3-Byte Worte verarbeiten musst ist 4-Byte 
Wortbreite ein Nachteil, uswusf.

Denk mal bitte ein wenig selbst nach. Das Ganze ist im Grunde trivial.

Gruss
Oops

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.