c语言 请问这个结果为什么是12?

 我来答
自我编程
2017-12-30 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部
了提高CPU的存储速度,编译环境对变量的
起始地址做了“对齐”处理。
在默认情况下,各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。
所以上题
按顺序分配内存
首先分配i int 4个字节 起始地址与结构首地址下相同,偏移量0 是4(int)的倍数
再分配 c 1个字节 起始地址与结构首地址的偏移量为4 是1(char)的倍数
最后分配float a 4个字节 起始地址与结构首地址的偏移量为5 因为5不是4的倍数,所以补了3位变成偏移量8
所以整个结构大小为4+1+3+4=12
mafangsan
2017-12-30 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2530万
展开全部
其实应该是4+1+4=9
但是编译器会做对齐,就是保证分配的内存是4的倍数,这样多用一点内存,但是读起来方便。所以就是12了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ChengZiXianS
2017-12-30 · TA获得超过1011个赞
知道小有建树答主
回答量:1434
采纳率:72%
帮助的人:457万
展开全部
为了效率。这涉及到计算机底层原理,简单说就是CPU都是从双数的地址读数据的,一次一般读4个字节,那么你这个9字节的结构读3次,显示没有任何问题,但是跟在它后面的数据的地址就变成单数了,然后需要读两次,再组合成一个数据,显然会降低效率,所以编译器会将结构体添加到合适的大小。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式