Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verständnis des Speicherlayouts von Structs | Verstehen von Structs und Speicher
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
C-Strukturen Meistern

bookVerständnis des Speicherlayouts von Structs

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 deren Mitglieder im Speicher platziert werden.

Im Folgenden eine Übersicht, wie die grundlegende Speicherzuweisung für Strukturen in C funktioniert:

main.c

main.c

copy
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.

Im Bild ist zu sehen, dass der erste Teil des Speichers (hellerer Abschnitt) 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 in Anspruch nehmen und das Programm langsamer laufen.

question mark

Warum ergibt sizeof(struct Test) den Wert 8 statt 5?

Select the correct answer

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

Suggested prompts:

Can you explain more about alignment and why it's necessary?

Are there ways to reduce the size of a structure in C?

How does padding affect performance in real-world programs?

bookVerständnis des Speicherlayouts von 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 deren Mitglieder im Speicher platziert werden.

Im Folgenden eine Übersicht, wie die grundlegende Speicherzuweisung für Strukturen in C funktioniert:

main.c

main.c

copy
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.

Im Bild ist zu sehen, dass der erste Teil des Speichers (hellerer Abschnitt) 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 in Anspruch nehmen und das Programm langsamer laufen.

question mark

Warum ergibt sizeof(struct Test) den Wert 8 statt 5?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 1
some-alt