Chinaunix

标题: 等待解决,结构体内存分配问题? [打印本页]

作者: xiaogang_li    时间: 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,这个值是怎么得来的,不解?
谢谢回答!
作者: happy_fish100    时间: 2010-03-08 18:23
回复 1# xiaogang_li

内存分配块中,除了显式分配的空间外,还有内存管理相关字段占用的空间。估计每个分配块中内存管理部分占用的空间大小就是 56 - 4 = 52字节。
作者: xiaogang_li    时间: 2010-03-08 18:29
内存管理需要的内存比我申请的空间都要大,这也太不合理了了吧?不知有没有其他的解释呀
作者: samlumengjun    时间: 2010-03-08 18:30
代码中两点问题,size = sizeof(sizeof(struct TT));
还有最后没有free.
呵呵,不好的习惯啊.
作者: xiaogang_li    时间: 2010-03-08 18:35
这只是一个测试程序,想验证一个问题,不过还是谢谢你的提示。
呵呵,写错了,应该是size = sizeof(struct TT);
作者: lenky0401    时间: 2010-03-08 18:40
跟进malloc
作者: lenky0401    时间: 2010-03-08 18:41
http://blog.chinaunix.net/u/26524/showart_1946446.html
作者: hellioncu    时间: 2010-03-08 18:59
你只申请4字节,但一般实际分配的最小值都比4大
作者: xiaogang_li    时间: 2010-03-08 19:03
我只想知道56个字节是怎么来的?是规定的就这么大,还是计算所得,总得有个理由吧,我不要模糊的说明,谢谢
作者: hellioncu    时间: 2010-03-08 19:53
这个跟平台相关的。

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

具体深究这个数字是56还是其他没有多少实际意义,反正申请多大,就只用多大的内存。
作者: xiaogang_li    时间: 2010-03-08 21:32
呵呵,谢谢各位了
作者: liexusong    时间: 2010-03-08 22:23
应该是内存管理的问题吧!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2