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

上传人:豆浆 文档编号:31937086 上传时间:2018-02-09 格式:DOC 页数:2 大小:21KB
返回 下载 相关 举报
结构体所占内存大小(字节对齐问题)_第1页
第1页 / 共2页
结构体所占内存大小(字节对齐问题)_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《结构体所占内存大小(字节对齐问题)》由会员分享,可在线阅读,更多相关《结构体所占内存大小(字节对齐问题)(2页珍藏版)》请在金锄头文库上搜索。

1、C语言中结构体占用内存大小的问题 2014-04-22 10:55 Deng_Ran | 分类:C/C+ | 浏览 381次 struct stOne / 结构体 1char c1;int i1;char c2;int i2;struct stTwo / 结构体 2char c1;char c2;int i1;int i2;各位大侠,上面两个结构体因为硬件的边界调整原则,占用内存大小并不相同。在我的电脑上,sizeof(struct stOne)是 16,sizeof(struct stTwo)是 12。小弟有一疑问,会不会存在一种情况:struct stOne stA, stB; / 定义两

2、个结构体这两个结构体大小并不相同,即同一类型结构体能否占用不同内存大小?分享到: 2014-04-22 11:01 提问者采纳 你好,struct stOne stA, stB; / 定义两个结构体这两个结构体大小完全相同!追问谢谢大侠回复,小弟还有一问题请教:struct stOnechar c1;int i1;char c2;char类型变量的边界是 1,int 类型变量的边界是 4,那么,我感觉这个结构体的大小是 1 + (3) + 4 + 1 = 9,但实际上占用的内存是 12?回答是的,最后的大小就类似于一个由几根木板组成的 长方形,也许每根的长度都不一样,但是都要按照最长的那根那样

3、存放,所以占用内存= 最长的那根 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变量的前三个,这样会出问

4、题,所以,会得到你上面 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.满足条件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号