Messung und Instrumentierung
Speicherlayout und Berechnung von Datengrößen in C und C++ Strukturen und Vereinigungen
Table of Contents
Das Verständnis, wie Daten im Speicher gespeichert werden, ist für eine effiziente Programmierung in C und C++ unerlässlich. Strukturen und Vereinigungen sind grundlegende Datentypen, die das Speicherlayout und die Größe beeinflussen. Dieser Artikel erklärt, wie Speicher für diese Datentypen zugewiesen wird und wie ihre Größen genau berechnet werden können.
Speicherlayout von Strukturen
Strukturen in C und C++ sind Sammlungen von Variablen, möglicherweise verschiedener Typen, die unter einem einzigen Namen zusammengefasst sind. Der Compiler weist Speicher für eine Struktur zu, indem er jedes Element sequentiell platziert, mit möglicher Padding, um die Ausrichtungsanforderungen zu erfüllen.
Die Gesamtgröße einer Struktur ist die Summe der Größen ihrer Mitglieder plus der zur Ausrichtung hinzugefügten Polsterung. Padding stellt sicher, dass jedes Mitglied an einer Adresse beginnt, die durch seine Größe oder Ausrichtungsanforderung teilbar ist.
Memory Layout von Gewerkschaften
Alle Mitglieder einer Vereinigung teilen sich den gleichen Speicherplatz, der der Größe ihres größten Mitglieds entspricht.
Die Größe einer Vereinigung wird durch ihr größtes Mitglied bestimmt, plus mögliches Padding für die Ausrichtung.
Berechnung der Datengrößen
Die Berechnung der Größe von Strukturen und Vereinigungen beinhaltet die Summe der Größen der einzelnen Mitglieder und die Berücksichtigung von Padding für die Ausrichtung. Der Operator sizeof in C und C++ liefert die Gesamtgröße in Bytes.
Betrachten wir zum Beispiel eine Struktur mit einem und einem Die Größe der Struktur hängt von der Größe von , der Größe von und der für die Ausrichtung hinzugefügten Polsterung ab.
- Benutze sizeof, um die Gesamtgröße zu bestimmen.
- Berücksichtigen Sie die Ausrichtungsanforderungen für jedes Mitglied.
- Konto für Padding, das vom Compiler hinzugefügt wurde.
- Denken Sie daran, dass Gewerkschaften das Gedächtnis unter allen Mitgliedern teilen.