Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Understanding Memory Layout of Structs | Structs und Speicher Verstehen
C-Strukturen

Understanding Memory Layout of Structs

Swipe um das Menü anzuzeigen

Speicherstrukturen in der Programmiersprache C spielen eine entscheidende Rolle beim Verständnis, wie Daten im Speicher abgelegt und abgerufen werden. Wenn eine Struktur in C definiert wird, legt der Compiler anhand von Ausrichtungs- und Auffüllungsregeln fest, wie ihre Mitglieder im Speicher platziert werden.

Überblick über die grundlegende Speicherzuweisung für Strukturen in C:

main.c

main.c

123456789101112131415
#include <stdio.h> // simple struct struct Test { char x; // 1 byte int y; // 4 bytes }; int main() { struct Test example; printf("Size of struct Test: %zu\n", sizeof(example)); printf("Address of example.x (char): %p\n", &example.x); printf("Address of example.y (int): %p\n", &example.y); return 0; }

Wie erwartet sollte eine solche Struktur 5 Byte belegen: 1 Byte für char x, 4 Byte für int y, aber tatsächlich sind es 8 Byte.

Warum ist die Größe der Struktur deutlich größer als erwartet?

Dies geschieht, weil der Compiler Auffüllbytes (Padding) zwischen den Mitgliedern einfügen kann, um sicherzustellen, dass jedes Mitglied an einer Adresse beginnt, die ein Vielfaches seiner Größe ist.

Speicher+8+Byte

Im Bild ist zu sehen, dass der erste Teil des Speichers (hellerer Bereich) zur Variablen char x gehört, die nur ein Byte belegt. Danach folgen drei leere Bytes — dies ist das Padding, das vom Compiler automatisch hinzugefügt wird, damit das nächste Element an der richtigen Adresse beginnt. Nach dem Padding wird die Variable int y gespeichert, die vier Byte belegt.

Insgesamt belegt die Struktur somit acht Byte: eines für char, drei für die Ausrichtung und vier für int.

Dieses Layout dient dazu, dem Prozessor einen effizienteren Datenzugriff zu ermöglichen. Ohne Ausrichtung würde der Zugriff auf Strukturmitglieder mehr Zeit benötigen und das Programm langsamer laufen.

question mark

Warum gibt sizeof(struct Test) 8 statt 5 zurück?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 3. Kapitel 1
some-alt