C ++:结构的大小?

时间:2017-07-30 06:42:55

标签: c++

我的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? 请问任何人都可以详细计算吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

int确实是4个字节(至少在x86 64位机器中)。指针(至少在x86 64位机器中)是8个字节,因此理论上结构可能是12个字节。但是,它被填充到本机字大小(8字节)的乘法 - 而12字节的壁橱集合将是16字节。

答案 1 :(得分:1)

结构被打包为使用的“最大单词”的大小。例如,如果你有这样的结构:

struct   ThreeBytes {
     char  one;
     short two;
};

其大小将为4个字节,因为字段one将填充为short的大小,即在该字段之后存在未使用的字节。如果twoint,则结构的大小为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来禁用填充。但是某些平台根本不允许这样做。