LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3083|回复: 13

对kfree有点疑惑,请大家指教!

[复制链接]
发表于 2006-8-15 22:34:57 | 显示全部楼层 |阅读模式
如果定义两个结构,struct tmp1{}; struct tmp2;
然后用kmalloc分配sizeof(struct tmp1)+sizeof(struct tmp2)大小的内存区域,用指针p保存返回的指针,那么现在我想释放这片内存区域用kfee应该如何实现?

想着想着,如果在定义char *p;
p=kmalloc(100*sizeof(char), GFP_KERNEL);
那么是否用kfree(p);就能释放掉这整片内存?还是这样只是释放了一个sizeof(char)的空间?kfree是释放p指针类型的空间大小吗?突然好糊涂了啊!那位兄弟给详细介绍一下kfree啊!
发表于 2006-8-16 01:32:39 | 显示全部楼层
当然是整片内存
看来用户层的malloc/free你了解的还是不够啊

不过也不怪你,整个中国都这么浮躁
建议你看看Programming from the ground up
里面有个很简单的malloc/free的实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 09:43:02 | 显示全部楼层
问题是内核怎么知道从p开始释放多少内存空间呢?
Post by zhllg
当然是整片内存
看来用户层的malloc/free你了解的还是不够啊

不过也不怪你,整个中国都这么浮躁
建议你看看Programming from the ground up
里面有个很简单的malloc/free的实现
回复 支持 反对

使用道具 举报

发表于 2006-8-16 10:09:43 | 显示全部楼层
自然是记录下来的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 10:17:48 | 显示全部楼层
Post by zhllg
自然是记录下来的

那也就是说它和p指针的类型没有关系?对linux内存管理这一块不清楚.
还有一个问题要请教,就是如果我申明 int buf[0];
那么这个buf是什么意义?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 10:42:49 | 显示全部楼层
Post by jiyongguang
那也就是说它和p指针的类型没有关系?对linux内存管理这一块不清楚.
还有一个问题要请教,就是如果我申明 int buf[0];
那么这个buf是什么意义?

这样会进行内存分配吗?
回复 支持 反对

使用道具 举报

发表于 2006-8-16 11:54:18 | 显示全部楼层
info gcc "c ext" zero
那个是gcc的扩展,零长度数组
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 12:36:30 | 显示全部楼层
Post by zhllg
info gcc "c ext" zero
那个是gcc的扩展,零长度数组

那它在声明的时候是否会被分配内存空间?
回复 支持 反对

使用道具 举报

发表于 2006-8-16 16:34:14 | 显示全部楼层
不会
看看info,命令我都给你了
回复 支持 反对

使用道具 举报

发表于 2006-8-16 16:54:33 | 显示全部楼层
malloc和free 在《C程序设计语言》一书里就有一个很简单的实现。可以参考。
有的实现就是在所分配堆内存空间的前一个单元记录分配的内存大小。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表