3

我的代码:

typedef struct {
    int sizeOfMyIntArray;
    int* myIntArray;
    float someFloat;
} my_struct_foo;

int main() {
    printf("The size of float is: %d\n", sizeof(float));
    printf("The size of int is: %d\n", sizeof(int));
    printf("The size of int* is: %d\n", sizeof(int*));
    printf("The size of my_struct_foo is: %d\n", sizeof(my_struct_foo));
    return 0;
}

我想这很简单。虽然,我对这个程序的输出结果有点惊讶......

The size of float is: 4
The size of int is: 4
The size of int* is: 8
The size of my_struct_foo is: 24

我有一个浮点数、一个整数和一个指向整数的指针。在我的脑海中,我在想:4 + 4 + 8 = 16...不是 24。为什么我的结构的大小是 24 而不是 16?

4

1 回答 1

2

对齐和填充。应该在int*8 字节边界上对齐,因此编译器intfloat对齐。

如果您重新排序成员,

typedef struct {
    int sizeOfMyIntArray;
    float someFloat;
    int* myIntArray;
} my_struct_foo;

指针将在没有任何填充的情况下正确对齐,因此结构的大小(很可能,即使不需要,编译器也可以添加填充,但我不知道这样做)为 16。

于 2012-10-13T23:27:47.710 回答