免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2169 | 回复: 11
打印 上一主题 下一主题

等待解决,结构体内存分配问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-08 18:16 |只看该作者 |倒序浏览
struct TT
{
        int a;
};

int main(int argc, char *argv[])
{
        int i;
        int size;

        struct TT *pStru;

        for (i = 0; i < 100; i++)
        {
                size = sizeof(sizeof(struct TT));
                pStru = (struct TT*)malloc(size);

                printf("==结构体大小:%d, \ta[%d]的地址为:%d===\n", size, i, pStru);

                printf("");
        }
        return 0;
}

运行结果如下图:




想请问一下:结构体指针之间的差值每次都是56,这个值是怎么得来的,不解?
谢谢回答!

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2010-03-08 18:23 |只看该作者
回复 1# xiaogang_li

内存分配块中,除了显式分配的空间外,还有内存管理相关字段占用的空间。估计每个分配块中内存管理部分占用的空间大小就是 56 - 4 = 52字节。

论坛徽章:
0
3 [报告]
发表于 2010-03-08 18:29 |只看该作者
内存管理需要的内存比我申请的空间都要大,这也太不合理了了吧?不知有没有其他的解释呀

论坛徽章:
0
4 [报告]
发表于 2010-03-08 18:30 |只看该作者
代码中两点问题,size = sizeof(sizeof(struct TT));
还有最后没有free.
呵呵,不好的习惯啊.

论坛徽章:
0
5 [报告]
发表于 2010-03-08 18:35 |只看该作者
这只是一个测试程序,想验证一个问题,不过还是谢谢你的提示。
呵呵,写错了,应该是size = sizeof(struct TT);

论坛徽章:
0
6 [报告]
发表于 2010-03-08 18:40 |只看该作者
跟进malloc

论坛徽章:
0
7 [报告]
发表于 2010-03-08 18:41 |只看该作者

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
8 [报告]
发表于 2010-03-08 18:59 |只看该作者
你只申请4字节,但一般实际分配的最小值都比4大

论坛徽章:
0
9 [报告]
发表于 2010-03-08 19:03 |只看该作者
我只想知道56个字节是怎么来的?是规定的就这么大,还是计算所得,总得有个理由吧,我不要模糊的说明,谢谢

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
10 [报告]
发表于 2010-03-08 19:53 |只看该作者
这个跟平台相关的。

如你申请4字节,操作系统给你实际分配的往往不止4字节,Linux下可能是16、32字节等。
Windows下Debug、Release模式可能还有差别(Debug > Release?),我现在没有环境可以试验。

具体深究这个数字是56还是其他没有多少实际意义,反正申请多大,就只用多大的内存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP