Wie helfen ausrichtende Strukturen in C?

8

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?

    
user3360203 08.06.2016, 22:54
quelle

3 Antworten

4

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.

    
user2357112 08.06.2016 22:59
quelle
2

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

    
Jason 08.06.2016 23:04
quelle
1

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

    
Ashwani 09.06.2016 03:42
quelle

Tags und Links