Ich bin auf diese Seite The Lost Art of C Structure Packing gestoßen und während ich noch nie irgendwelche Strukturen strukturieren musste, würde ich gerne ein bisschen mehr lernen, so dass wenn ich es auch brauche - ich kann.Wo finde ich die Ausrichtungsanforderung für irgendeinen beliebigen Compiler?
Dort heißt es:
Lagerung für die grundlegenden C-Datentypen auf einem x86 oder ARM-Prozessor normalerweise nicht an beliebigen Byte-Adressen im Speicher starten. Vielmehr hat jeder Typ außer char eine Ausrichtungsanforderung; Zeichen können bei jeder Byte-Adresse beginnen, aber 2-Byte-Kurzschlüsse müssen bei einer geraden Adresse beginnen, 4-Byte-Ints oder Gleitkommazahlen müssen bei einer durch 4 teilbaren Adresse beginnen, und 8-Byte-Langs oder -Doppel müssen bei einer durch 8 teilbaren Adresse beginnen Signed oder Unsigned macht keinen Unterschied.
Bedeutet dies, dass alle 32-Bit-Prozessoren (x86, ARM, AVR32, PIC32, ...) diese Ausrichtungsanforderung haben? Was ist mit 16-Bit-Prozessoren?
Wenn nicht, und es ist gerätespezifisch, wo finde ich diese Informationen? Ich habe versucht, durch Microchip XC16 Manual gesucht, aber ich konnte die Ausrichtungsanforderungen nicht finden, die sagen, dass Ints an Adressen beginnen durch 4 teilbar
Ich gehe davon aus, dass die Informationen gibt, und ich bin nicht für die richtigen Schlüsselwörtern suchen - was ist die "Ausrichtungsanforderung" genannt, wenn ich online nach weiteren Informationen suchen würde?
Eine Frage über "alle Hardware, Vergangenheit, Zukunft, spekulativ", ist ziemlich schwer zu beantworten. –
@KerrekSB Der Jist von dem, was ich fragen, ist für, ist wirklich, wo kann ich die Informationen für jedes Gerät finden, wenn alle 32-Bit-Prozessoren nicht gleich ausgerichtet sind. Ist es in der Bedienungsanleitung? Wenn ja, nach welchen Begriffen oder nach welcher Terminologie müssen Sie suchen und wo? Klärt das Dinge auf? – efox29
Ziemlich hart? Ich würde für unmöglich garantieren. Es ist Hardware und Implementierung abhängig. x86 zum Beispiel erlaubt beliebig ausgerichtete Lese-/Schreiboperationen, ein Compiler kann frei tun, was er will. Auf der anderen Seite erlaubt ARM keine beliebig ausgerichteten Zugriffe. – Leandros