当前位置: 代码迷 >> C语言 >> 关于sizeof(struct student)的问题
  详细解决方案

关于sizeof(struct student)的问题

热度:799   发布时间:2007-09-19 17:04:09.0

1*10 = 10,但是根据对齐原则,内存会分配12

什么的对齐原则


----------------解决方案--------------------------------------------------------
对齐原则是什么啊?第一次听到!
----------------解决方案--------------------------------------------------------
我也在一直考虑这个问题
----------------解决方案--------------------------------------------------------
以下是引用学c在2007-9-19 17:00:41的发言:

楼上:为什么是56呢?要是那样的话应该是54啊!!

我也想不通什么是56,但结果就是这样.


----------------解决方案--------------------------------------------------------
是内存地址对齐问题。

----------------解决方案--------------------------------------------------------
c中的对于struct的大小不能简单的理解为各个变量的大小之和,实际也不等于,但具体大小我也不知道如何得之,有望高人
----------------解决方案--------------------------------------------------------

不是什么高人,只不过学的时候关注这个问题了。
对齐是为了提高cpu处理效率,原则挺复杂(大致):
1、分配地址的顺序为成员声明顺序;
2、成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数;
3、结构结束大小必须为该结构中最大成员的倍数;(当该成员大小小于编译器默认的值时)
。。。。。还有一些想不起来了,给具体的题目吧。
比如:
struct stu
{
char name;
int dd;
double j;
};
sizeof(stu)=1+(3对齐)+4+8=16;







----------------解决方案--------------------------------------------------------

谢谢


----------------解决方案--------------------------------------------------------
TO 5楼:
我觉得你说的那个边界对齐应该加在int型上,也就是4*10+4
----------------解决方案--------------------------------------------------------

学学````学学```



----------------解决方案--------------------------------------------------------
  相关解决方案