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