结构体所占内存大小(字节对齐问题)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中结构体占用内存大小的问题

2014-04-22 10:55 Deng_Ran | 分类:C/C++ | 浏览381次

struct stOne // 结构体1

{

char c1;

int i1;

char c2;

int i2;

};

struct stTwo // 结构体2

{

char c1;

char c2;

int i1;

int i2;

};

各位大侠,上面两个结构体因为硬件的边界调整原则,占用内存大小并不相同。在我的电脑上,sizeof(struct stOne)是16,sizeof(struct stTwo)是12。

小弟有一疑问,会不会存在一种情况:

struct stOne stA, stB; // 定义两个结构体

这两个结构体大小并不相同,即同一类型结构体能否占用不同内存大小?

分享到:

2014-04-22 11:01 提问者采纳

你好,struct stOne stA, stB; // 定义两个结构体

这两个结构体大小完全相同!!

追问

谢谢大侠回复,小弟还有一问题请教:

struct stOne

{

char c1;

int i1;

char c2;

};

char类型变量的边界是1,int类型变量的边界是4,那么,我感觉这个结构体的大小是1 + (3) + 4 + 1 = 9,但实际上占用的内存是12?

回答

是的,最后的大小就类似于一个由几根木板组成的长方形,也许每根的长度都不一样,但是都要按照最长的那根那样存放,所以占用内存= 最长的那根 X 根数

有3个变量所以 4*3 =12

其他3条回答

2014-04-22 11:03 阳顶天鹿鼎记 | 七级

不会,同一个结构体占用的内存都是一样的,

stOne和stTwo之所以不同,是因为内存对齐问题。

取内存时,是按照主机系统是多少位来取的

32位系统,每次取四个字节

64位系统,每次取8个字节

根据你sizeof得到的结果,你的系统是32位的,所以每次取四个字节,而stOne char类型占用一个,而int占用四个,所以char类型自动占用了4个,否则,如果char占用一个,取得时候,去了一个char,然后去了int变量的前三个,这样会出问题,所以,会得到你上面sizeof的结果

stTwo,就不会因为是两个char类型挨着的,这样两个char类型占用四个,取得时候先取两个char,再取int。

评论 | 3 0

2014-04-22 11:04 冰血无双 | 七级

不会不同,自己查一下数据补齐、数据对齐,还有内存页的概念

评论 | 1 0

2014-04-22 11:05 ylx2193395 | 三级

这是因为字节对齐原则,在Linux下其是按2字节对齐,可是在VC++下默认是按8字节对齐,必须满足4的整数倍。这样有助于存储效率。第一个char 为1字节,int为4字节,由于8字节对齐原则系统会预留出3个字节,保证8个字节对齐。而第二个两个char 2个字节,1个int4字节,系统补充2个字节后,此时8个字节,再加一个Int为12.满足条件

相关文档
最新文档