Ich weiß, dass iPhones (und iPads) auf ARM-Prozessoren ausgeführt werden, die standardmäßig Little-Endian sind (und iOS an sich ist laut Wikipedia-Seite Little-Endian). ARM-Prozessoren sollen jedoch zwischen Little-Endian und Big-Endian wechseln können. Wie ist das möglich und wie funktioniert es?
10
Antworten:
selbst wenn Sie denken, dass Sie nicht wissen müssen, was jemand tun könnte. Sie müssen nicht erklären, warum jemand es nicht benötigt, da Sie den Kontext möglicherweise nicht kennen. Die Frage ist nicht "Muss ich Endianness kennen", sondern "Ist es Big- oder Little Endian"? Konzentrieren Sie sich also bitte auf das Thema!
Allerdings ist es wahrscheinlich die beste Vorgehensweise, wenn wir das Rad nicht neu erfinden und uns nur auf die Makros verlassen, die Apple dafür bereitstellt. Der Grund dafür ist, dass sie einige Zeit damit verbracht haben, diese Makros zu optimieren, und dafür gesorgt haben, dass sie sowohl mit dem Simulator als auch mit Mac, iPhone und all ihren Betriebssystemen und ihrer Hardware gut funktionieren.
Wenn Sie herausfinden, was beim Aufrufen passiert, werden
CFSwapInt16BigToHost
möglicherweise Kommentare angezeigt, die darauf hindeuten, dass diese Makros wahrscheinlich den besten Maschinencode erzeugen, den Sie mithilfe der Compileroptimierung erhalten können:quelle
Endianness ist nichts, mit dem Endbenutzer wirklich interagieren - aber hier ist eine 10.000-Fuß-Zusammenfassung dessen, was dies für Benutzer von Apple-Produkten bedeutet.
Kurz gesagt - Endianness für einen internen Prozessor entspricht der Schreibrichtung für eine Sprache. Wenn Sie sich Buchstaben eines englischen Textes ansehen, stimmen wir alle zu, oben links zu beginnen und zuerst rechts und dann unten zu lesen. Andere Sprachen beginnen rechts und lesen links und einige lesen sogar zuerst nach unten, bevor sie sich nach links oder rechts bewegen .
Für einen Benutzer ist es nicht wirklich wichtig, ob die Bits in einer internen Darstellung einer Adresse oder Nummer als Little Endian oder Big Endian gespeichert werden. Tatsächlich hält sich OS X auf einem Mac an eine Big-Endian-Darstellung und iOS an die Little-Endian-Reihenfolge . Diese Tatsache bedeutet keineswegs, dass die beiden Geräte nicht richtig zusammenarbeiten können. Dies funktioniert, weil diese Darstellung nur intern erfolgt und uns als Benutzer nicht ausgesetzt wird.
quelle