鱼C论坛

 找回密码
 立即注册
查看: 4886|回复: 5

结构对齐

[复制链接]
发表于 2013-9-7 12:22:02 | 显示全部楼层 |阅读模式
1鱼币
一个变量的地址,一般为这个变量所占内存数的倍数。
32后打印结果就和自己想的不一样。
QQ截图20130907121940.png
QQ截图20130907121907.png

最佳答案

查看完整内容

处于效率的考虑,C语言引入了字节对齐机制,一般来說,不同的编译器字节对齐机制有所不同,但一般有一下3条准则。 1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除 2)结构体每个成员相对于结构体首地址的偏移量(fooset)都是成员大小的整数倍,如有需要,编译器会在成员之间加上中间填充字节 3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一位成员之后加上末尾填充字节 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 12:22:03 | 显示全部楼层
本帖最后由 my_angel 于 2013-9-8 21:48 编辑

处于效率的考虑,C语言引入了字节对齐机制,一般来說,不同的编译器字节对齐机制有所不同,但一般有一下3条准则。
1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2)结构体每个成员相对于结构体首地址的偏移量(fooset)都是成员大小的整数倍,如有需要,编译器会在成员之间加上中间填充字节
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一位成员之后加上末尾填充字节

看你的截图是刚入门linux下的C编程吧,继续努力吧。。。
更多关于C语言的内容可以去我的贴子下载我的总结笔记看看哦。。。。


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 12:39:16 | 显示全部楼层
本帖最后由 cainiao367 于 2013-9-7 12:41 编辑

你的意思是说再重新编译一遍结果就和上一次不同,我把我编译的结果贴出来

                               
登录/注册后可看大图

after complie

after complie

code

code
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 12:48:45 | 显示全部楼层
我的结果一直是40。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 22:41:06 | 显示全部楼层
有些编译器好像对struct 结构体变量成员地址大小总和计算方式是不同{:7_176:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-8 10:51:06 | 显示全部楼层
name只是一个地址吧。有18吗?????
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表