我的c ++代码
#include <iostream>
using namespace std ;
struct Node {
int data ;
struct Node *next;
};
int main(){
struct Node *head = NULL;
struct Node *second = NULL;
cout << sizeof(struct Node);
}
输出到终端
16
尺码16怎么样? int的大小是4bytes。 为什么它乘以4? 请问任何人都可以详细计算吗? 谢谢!
答案 0 :(得分:2)
int
确实是4个字节(至少在x86 64位机器中)。指针(至少在x86 64位机器中)是8个字节,因此理论上结构可能是12个字节。但是,它被填充到本机字大小(8字节)的乘法 - 而12字节的壁橱集合将是16字节。
答案 1 :(得分:1)
结构被打包为使用的“最大单词”的大小。例如,如果你有这样的结构:
struct ThreeBytes {
char one;
short two;
};
其大小将为4个字节,因为字段one
将填充为short的大小,即在该字段之后存在未使用的字节。如果two
为int
,则结构的大小为int
。如果您将结构与之对齐,则会发生这种情况:
// this structure got size of 4 bytes.
struct ThreeBytes {
char one;
char two;
short three;
};
这是不对齐的:
// This structure will have size 6
struct ThreeBytes {
char one;
short two;
char three;
};
这是默认行为,有允许更改打包的编译器指令(例如,参见#pragma pack
,编译器可能有所不同)。基本上你可以设置填充字段的单位或通过将其设置为1来禁用填充。但是某些平台根本不允许这样做。