黑马程序员技术交流社区

标题: 内存空间分配 [打印本页]

作者: wx_rMI3RFr8    时间: 2016-4-23 01:21
标题: 内存空间分配
struct student{  
    int age;
    char name[20];
    char sex;
};
求大神指点下这个结构体的长度是多少?为啥是这样的,一直没想明白.谢谢
作者: a_skting    时间: 2016-4-23 11:14
还没学到结构体。。。4+20+1+还有别的东西吗?坐等答案。。。。
作者: basketball    时间: 2016-4-23 22:50
还没学到这里,同求~~~~~~~
作者: 烛风小糊涂    时间: 2016-4-23 23:40
sizeof了一下,占28个字节。以下是基础班视频的内容:

计算结构体变量在内存中占用的字节数的方法:

1. 先找对齐模数;
          对齐模数:是结构体中的基本数据类型中占用字节数最大的那个;
2. 在计算结构体变量中的各个成员占用的字节和

在这里就是4+20+4 = 28;

那么为什么呢?

因为在这里,基本数据类型占字节数最大的是int类型,占4个字节,那么ok,就以4作为对齐模数-----毫无疑问,age被分配了4个字节;因为20正好是4的倍数,name[20]被分配了20个字节;sex被分配了4个字节,虽然char类型只占一个字节,但是由于对齐模数为4,而且前面分配完的24个字节正好被占得满满的,导致系统不得不为char sex多分配一块存储空间,而新划分的存储空间只能是4的倍数,所以虽然char类型本来只占一个字节,但是在这里它占用了4个字节的,相当于你拿了4碗饭,但只吃一碗,有3碗空着。


如有错误,恳请指正,不胜感激!
作者: 叶子哥    时间: 2016-4-23 23:53
   有关结构体占用内存的大小问题,首先查看每个成员的类型大小,取其最大的类型作为整个结构体的模数.然后每个成员的占用内存的大小都是模数的最小倍数,最后相加得结果.
    对于这题,最大的类型为  int类型,4个字节,所以模数为4. 然后对int age-->为1个模数;char name[20]-->为5个模数;
char sex-->为1个模数;最后相加得占用内存28个字节.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2