何时执行
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作为答案!怎么样?发生了什么事?
答案 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