Ich bin auf diesen C-Code gestoßen und versuche, ihn zu verstehen:
%Vor%Der erste Typdef definiert Mtx_t als eine 4x4-Matrix, soviel ich verstehe. Aber der zweite typedef für Mtx ruft nur den vorherigen Typ auf und fügt einen langen langen int mit der Bezeichnung force_structure_alignment hinzu.
Was ist der Zweck? Warum nicht einfach Mtx als 4x4-Matrix definieren und damit fertig sein?
Wie der Name andeutet, versuchen sie, Mtx
es in den Speicher mit den Anforderungen für die Ausrichtung der Adressen von long long
und nicht von long
zu versetzen. Dies kann für Anforderungen wichtig sein, die vom Betriebssystem oder der Prozessorarchitektur auferlegt werden. Google vermutet, dass "Mtx" wahrscheinlich eine Abkürzung für "Mutex" ist, und eine C-Mutex-Implementierung würde sich mit einigen ziemlich niedrigen Schnittstellen befassen.
Es kann für die Effizienz mit der Prozessorarchitektur getan werden. Wenn zum Beispiel die Größe von Mtx_t eine ungerade Anzahl von Bytes ist und die Befehlssatz- / Speicherarchitektur der Hardware beim Zugriff auf eine ungerade Adresse Kosten verursacht, sollten Sie sicherstellen, dass alle Ihre Mtx_t-Datensätze an Adressen sitzen, die billiger sind Zugang.
Es kann auch notwendig sein, mit einem Speicherblock mit fester Größe zu arbeiten, beispielsweise mit Coprozessoren. Durch die Verwendung einer gepolsterten Struktur kann dies einfacher verwaltet werden.
Lesen Sie mehr darüber hier: Zypern
Auf dem Chip befindet sich ein Datenbus, der Daten zum Lesen / Schreiben führt. Für einen schnelleren Speicherzugriff sind diese Busse dafür ausgelegt, Daten in mehreren Bytes zu übertragen, z. 4/8/16 Bytes. Aber dieser Bus kann Daten von keiner beliebigen Adresse mit gleicher Effizienz lesen / schreiben. Zum Beispiel ist ein 8-Byte-Datenbus schneller zum Lesen / Schreiben von Daten aus einem Speicher, der an der 8-Byte-Grenze ausgerichtet ist. Aus diesem Grund wird empfohlen, für eine hohe Effizienz große Daten / Strukturen so auszurichten, dass ein schneller Zugriff möglich ist. In Ihrem Beispiel geschieht dies, indem die Implementierung von Verwaltungsstrukturen durch den Compiler genutzt wird, die möglicherweise nicht das gewünschte Ergebnis liefern. Der Compiler kann jedoch explizit über die Ausrichtung einer Variablen unter Verwendung von Schlüsselwörtern, z. gcc verwendet 'aligned' Schlüsselwort