| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:不明白结构体里分配的内存大小。。。
只看楼主 加入收藏
bb499935589
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-6-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
不明白结构体里分配的内存大小。。。
程序如下所示:
#include<stdio.h>

struct student_type
{char name[10];
int num;
int age;
char sex;   
}stud[3];

main()
{int i=0,c;
c=sizeof(struct student_type);
printf("%d",c);
}

程序运行结果是:24   

系统共分配了24个字节给结构体使用,但我数了一下没有那么多的啊!求高手讲解一下结构体里的内存分配问题!!!
搜索更多相关主题的帖子: 内存 结构体 
2012-06-06 20:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
为了对齐必须占这么多 当然可以用参数不让它对齐 这样能省几个字节

不过省几个字节也没啥意思不是
2012-06-06 20:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我稍微改了一下你的代码测试了一下

00405080  41 00 00 00 00 00 00 00  A.......
00405088  00 5A 00 00 78 56 34 12  .Z..xV4
00405090  44 33 22 11 4D 00 00 00  D3"M...
00405098  4C 00 00 00 00 00 00 00  L.......



    stud[0].name[0] = 'A';
    stud[0].name[9] = 'Z';
    stud[0].num = 0x12345678;
    stud[0].age = 0x11223344;
    stud[0].sex = 'M';
    stud[1].name[0] = 'L';

你分析分析到底多在哪里。。
2012-06-06 20:35
bb499935589
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 楼主 bb499935589
能详细点说说么????
2012-06-06 20:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
对于32位CPU 一次处理32位的内容 也就是4个字节的内容比较快 如果不是4字节或4字节对齐也就是4的倍数个 处理的慢

于是 编译器会对不是4字节的内容填充一些东西让它对齐 这些 对于代码来说是不可见的 也就是 这是编译器控制的 不受你代码的控制 当然这个功能可以通过调试的手段知道 就像上面我举的例子

对于你这个 字符串填了两个字节凑12字节 结构体填了3字节凑24字节

也可以不让它对齐 也就是不填 具体请看编译器的参数


[ 本帖最后由 zklhp 于 2012-6-6 20:56 编辑 ]
2012-06-06 20:49
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
其实上面的数据已经很明白了 你们总是不会自己分析
2012-06-06 20:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
以上这些和平台和编译器有关 比如你用16位的编译器 int就是2字节 那样对齐等东西又不一样了
2012-06-06 20:57
bb499935589
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 7楼 zklhp
Thank you very much!
2012-06-06 21:00
快速回复:不明白结构体里分配的内存大小。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021214 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved