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;
}
运行结果如下图:
未命名.jpg
(66.3 KB, 下载次数: 13)
下载附件
2010-03-08 18:11 上传
想请问一下:结构体指针之间的差值每次都是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