即使向其添加新成员后,结构大小也保持不变

时间:2014-11-13 21:09:54

标签: c++ string struct

何时执行

cout << sizeof(string);

我得到8作为答案。

现在我有一个结构

typedef struct {
    int a;
    string str;
} myType;

我正在执行

cout << sizeof(myType);

我的答案是16分。

现在我改变了我的结构

typedef struct {
    int a, b;
    string str;
} myType;

我正在执行

cout << sizeof(myType);
我得到了16作为答案!怎么样?发生了什么事?

4 个答案:

答案 0 :(得分:7)

也许padding正在发生。例如。 sizeof(int)可以是4个字节,编译器可以在a之后添加4个字节,以便进行数据对齐。布局可能是这样的:

typedef struct {
    int a;      // 4 bytes
                // 4 bytes for padding
    string str; // 8 bytes
} myType;

typedef struct {
    int a;      // 4 bytes
    int b;      // 4 bytes
    string str; // 8 bytes
} myType;

答案 1 :(得分:0)

看起来像8字节对齐。

因此,如果您有任何少于8个字节的数据类型,它仍将使用8个字节。

我假设指针是8字节,而整数只是4字节。

您可以使用此处列出的代码强制1字节对齐Struct one-byte alignment conflicted with alignment requirement of the architecture?。然后你应该为第一种情况获得不同的大小。

答案 2 :(得分:0)

它被称为结构打包,以实现最佳的内存对齐。

请参阅The Lost Art of C Structure Packing了解具体方法和原因。它在C和C ++中以相同的方式完成。

答案 3 :(得分:-2)

在C / C ++中,结构是&#34;打包&#34;在字节块中。您可以指定应该打包结构的大小。 这里有一个参考:http://msdn.microsoft.com/en-us/library/2e70t5y1.aspx