结构体的sizeof到底多大?

文字开端,先看本人构造的法典: 爱立信2011口试 360 2011口试触及

struct node{int a;int b;};

问:sizeof(Node)是多少? 答案很简略,在32位机上。,int是四八位位组,两个int是八八位位组。,sizeof(Node)执意8。

好的,上面的答案真的是8。,请看上面的构造。:

struct node{char a;int b;};

问:下面所说的事时候sizeof(Node)又是多少呢? int为4八位位组。,角色为1八位位组。,答案是5?

这回,没这么侥幸。,在机具上经营后来,答案是8。! Why?

确实,这指责空话成绩。,你在ANSI 在C.没说辞如此的!条件你有差别的体系构造、差别的汇编者会接到差别的答案。。这么,谁使不适了5到8?

这引入了本人理念。,称为内存留下印象。同一的内存留下印象,指具有限定的记忆力LOC的计算机体系构造(如x86)。,必需品它的地址是一定数量的时机,通常下面所说的事数字是4或8。。这一必需品观念化了处理机设计,向前推了记录爆发效力。。为什么会有如此的的设计呢?,浅谈内存信息转移通路做成某事使合在一起:封合位数,以32位信息转移通路为例,地址信息转移通路永远4位留下印象,因而记录是留下印象的。,记录可以在本人圆中识数的。万一你不默认喂,你可以撑物跳它。,牢记要留下印象。。万一你想加浓默认,在喂参观另一篇文字。。

觉悟下面所说的事后来,而且朕才干默认。,它确实是本人高效的汇编者。,在邻近变量经过敷非常满足八位位组,以确保记录别号。。x86构造是4个留下印象的,因而sizeof(Node)是8指责5。

让朕再举本人案件。:

struct node{int a;char b;char c;int d;char d;};

这时的sizeof(Node)是多少呢?没错,是16。

好的,因朕觉悟留下印象是由汇编者满足的。,这么朕可以使不适留下印象方法吗? 答案是一定的。,用C空话编辑,朕可以经过。

使不适准直模量。

注:一切这些现时都是x86 Linux下GCC汇编者的坚信礼,很好的东西对立面体系和汇编者将接到差别的产生。。

让朕再举本人案件。:

struct node {double a;int b;int c;char d;};

下面所说的事时候的sizeof(node)是多少?20?24?

竟,在这点上你会瞥见,在Windows上用VC编辑时,你会接到24。;当您在Linux上用GCC编辑时,你会接到20。!竟,这不管到什么程度显示了下面所说的事记录的留下印象方法是由编辑决议的。!在VC中规则, 构造变量的主要的地址可以按其巨大区别。;在GCC中,最大矫正模量仅为4。,也执意说,条件在构造中在双重典型,留下印象模块剧照4?,因而记录契合1,2,4留下印象。因而,大约两种差别汇编者,你接到差别的答案。!

发表评论

电子邮件地址不会被公开。 必填项已用*标注