免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3346 | 回复: 14
打印 上一主题 下一主题

[C] 有关内存对齐的小问题 [复制链接]

论坛徽章:
1
申猴
日期:2013-09-03 17:48:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-07 20:55 |只看该作者 |倒序浏览
我知道在结构体中要满足
一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
二、结构体大小必须最宽基本类型成员大小的整数倍

有这样一个结构体:

typedef struct stru{
    float f;
    char p;
    int adf[3];
}str;

按照上面的原则,float占4字节,后接一个字节的char型,然后数组共占12个字节,他的便宜地址应该是12的整数倍,所以会再char型后面填充字节,知道int数组的偏移地址为12后,再接int型数组,所以应该占了24个字节啊,但是我在linux下试了一下结果是20字节,求高手指点一下。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
2 [报告]
发表于 2013-07-07 21:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
申猴
日期:2013-09-03 17:48:13
3 [报告]
发表于 2013-07-07 21:10 |只看该作者
回复 2# pmerofc


    你可以试一下,正常来说这个结构体的大小应该是2 + 1 +3*4 =17
     但是sizeof(str)= 20

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2013-07-07 21:25 |只看该作者
数组adf是int的,偏移地址满足sizeof(int)的整数倍即可

论坛徽章:
1
申猴
日期:2013-09-03 17:48:13
5 [报告]
发表于 2013-07-07 22:05 |只看该作者
回复 4# hellioncu

不用考虑满足偏移量的条件吗?照你那样说的话 2+1+3*4=15,那应该sizeof(str)=16就行了啊,不需要是20


   

论坛徽章:
1
申猴
日期:2013-09-03 17:48:13
6 [报告]
发表于 2013-07-07 22:09 |只看该作者
回复 4# hellioncu


    哦,我大约明白了,上面计算也错了float是4个字节4+1个字节后是int的数组,这时候偏移量必须是4的倍数,所以在后面填充3个字节后,再接int数组,所以是20个字节,而且20也能被4整除

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
7 [报告]
发表于 2013-07-07 22:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
8 [报告]
发表于 2013-07-08 02:14 |只看该作者
回复 2# pmerofc

不要用
疑问句 / 反问句
没有足够的信息支撑 有的人分不清你是在使用哪种修辞手法
直接陈述句   

"没有这回事 楼主你看的书说错了"

论坛徽章:
0
9 [报告]
发表于 2013-07-08 08:38 |只看该作者
回复 1# wangjc_strive


    C语言字节对齐.pdf (262.46 KB, 下载次数: 51)
看看我写的这个文档,也许对你有帮助

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
10 [报告]
发表于 2013-07-08 08:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP