Alignment Requirements und Padding

C++ Wissenswertes

x64

Beispiele erstellt auf g++ 4.3.3 ubuntu 9.04 amd64.

// sizeof(char) == 1
// sizeof(short) == 2
// sizeof(int) == 4
// sizeof(long) == 8
// sizeof(char*) == 8

struct A
{
    char c1;
};// sizeof(A) == 1

struct B
{
    char c1;
    char c2;
};// sizeof(B) == 2
struct C
{
    short s1;
    char c1;
};// sizeof(C) == 4
0123
s1s1c1x

1 byte Padding am Ende eingefügt, um s1 in einem Array von C auf 2byte auszurichten.

struct D
{
    char c1;    
    short s1;
};// sizeof(D) == 4
0123
c1xs1s1

1 byte Padding nach c1 eingefügt, um s1 auf Größe des nachfolgenden Typs (short 2byte) auszurichten.

struct E
{
    char c1;    
    short s1;
    char c2;
};// sizeof(E) == 6
012345
c1xs1s1c2x

1 byte Padding nach c1 eingefügt, um s1 auf Größe des nachfolgenden Typs (short 2byte) auszurichten. 1 byte Padding am Ende eingefügt, um E auf ein vielfaches von Größe des größten Typs auszurichten.

struct F
{
    char c1;  
    char c2;      
    short s1;
};// sizeof(F) == 4
0123
c1c2s1s1

Kein Padding benötigt.

Diskussion

Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...

Name:

Nachricht:


doxapp c++
Zur Übersicht
home