Heim > häufiges Problem > Wird die Byteausrichtung die Effizienz des Speicherzugriffs beeinflussen?

Wird die Byteausrichtung die Effizienz des Speicherzugriffs beeinflussen?

(*-*)浩
Freigeben: 2019-12-26 09:27:17
Original
5739 Leute haben es durchsucht

Da es nur wenige C++-Projekte gibt und diese relativ klein sind, habe ich mich nie mit dem Thema Byte-Ausrichtung befasst. Allerdings sollte die Byte-Ausrichtung einen großen Einfluss auf die Speicherverwaltung und die CPU-Ausführungseffizienz in großen Anwendungen haben. Dieser Artikel basiert auf einigen Informationen und gibt eine kurze Zusammenfassung.

Wird die Byteausrichtung die Effizienz des Speicherzugriffs beeinflussen?

Die erste Schlussfolgerung ist zunächst, dass die Byteausrichtung die Ausführungseffizienz der CPU verbessern kann. (Empfohlenes Lernen: PHPSTORM )

Wenn die CPU Anweisungen ausführt, erhalten Sie die Daten aus dem Speicher, 16 Bytes......

Wenn zu diesem Zeitpunkt die Startadresse der CPU, die Daten von 4 Bytes oder mehr liest, 1 ist, muss sie mindestens 2 Datenblöcke lesen und dann 2 einfügen. Unnötige Daten im Block werden verworfen, und dann werden die nützlichen Daten gelöscht Die Daten werden in 4-Byte-Daten gespleißt. Dies erhöht offensichtlich den CPU-Betrieb und wirkt sich auf die Ausführungseffizienz der CPU-Anweisungen aus. Wenn die Startadresse der CPU, die Daten liest, bei 0, 4 ... liegt, muss jeweils nur ein Datenblock gelesen werden, und der Lesebefehl der CPU ist eine atomare Operation.


Byte-Ausrichtung bedeutet, dass sie für alle von der CPU gelesenen Daten sicherstellt, dass ihre Startadresse am Anfang des Datenblocks liegt, und den Wert erweitert, wenn die Anzahl der Datenbytes kleiner ist als die Der CPU-Datenblock (Granularität) belegt den gesamten Speicherplatz einer Granularität. Die Byteausrichtung erspart der CPU Datenabfang- und Spleißvorgänge.

Eine weitere Schlussfolgerung: Die Byteausrichtung ist hilfreich für die Speicheroptimierung.

In der Struktur wird gemäß dem Prinzip der automatischen Byte-Ausrichtung die Struktur

typedef struct _test {
char a;
int b;
char c;
} test;
Nach dem Login kopieren

Der Compiler verwendet die Bytenummer des Basistyps int mit der größten Anzahl von Bytes im Struktur als Gemäß dem Ausrichtungsstandard wird der char-Typ auf 4 Bytes erweitert, daher ist sizeof(test)=12, aber diese Speichernutzungseffizienz ist relativ gering.

Wenn Sie eine 1-Byte-Ausrichtung durch den Compiler angeben, wird die Ausführungseffizienz der CPU verringert.

#praama pack(1)
typedef struct _test {
char a;
int b;
char c;
} test;
#pragma pack()
Nach dem Login kopieren

Um den Speicher des Programms zu optimieren und gleichzeitig die Effizienz der CPU-Ausführung sicherzustellen, muss die Reihenfolge der Datenelemente in der Struktur angepasst werden

typedef struct _test {
int b;
char a;
char c;
} test;
Nach dem Login kopieren

Zu diesem Zeitpunkt belegt das Strukturmitglied b 4 Bytes, a und c teilen sich die nächsten 4 Bytes, von denen zwei Mitglieder die ersten beiden Bytes belegen, und die letzten beiden Bytes sind ungültige Daten, die während der Byteausrichtung gefüllt werden. Diese Struktur belegt 8 Bytes Speicherplatz.

Das obige ist der detaillierte Inhalt vonWird die Byteausrichtung die Effizienz des Speicherzugriffs beeinflussen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage