+ -
当前位置:首页 → 问答吧 → 对kfree有点疑惑,请大家指教!

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

时间:2006-08-16

来源:互联网

如果定义两个结构,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啊!

作者: jiyongguang   发布时间: 2006-08-16

当然是整片内存
看来用户层的malloc/free你了解的还是不够啊

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

作者: zhllg   发布时间: 2006-08-16

问题是内核怎么知道从p开始释放多少内存空间呢?
引用:
作者: zhllg
当然是整片内存
看来用户层的malloc/free你了解的还是不够啊

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

作者: jiyongguang   发布时间: 2006-08-16

自然是记录下来的

作者: zhllg   发布时间: 2006-08-16

引用:
作者: zhllg
自然是记录下来的
那也就是说它和p指针的类型没有关系?对linux内存管理这一块不清楚.
还有一个问题要请教,就是如果我申明 int buf[0];
那么这个buf是什么意义?

作者: jiyongguang   发布时间: 2006-08-16

引用:
作者: jiyongguang
那也就是说它和p指针的类型没有关系?对linux内存管理这一块不清楚.
还有一个问题要请教,就是如果我申明 int buf[0];
那么这个buf是什么意义?
这样会进行内存分配吗?

作者: jiyongguang   发布时间: 2006-08-16

info gcc "c ext" zero
那个是gcc的扩展,零长度数组

作者: zhllg   发布时间: 2006-08-16

引用:
作者: zhllg
info gcc "c ext" zero
那个是gcc的扩展,零长度数组
那它在声明的时候是否会被分配内存空间?

作者: jiyongguang   发布时间: 2006-08-16

不会
看看info,命令我都给你了

作者: zhllg   发布时间: 2006-08-16

malloc和free 在《C程序设计语言》一书里就有一个很简单的实现。可以参考。
有的实现就是在所分配堆内存空间的前一个单元记录分配的内存大小。

作者: ifree   发布时间: 2006-08-16

楼主可以参考下 内核中mm/slab.c中kmalloc,kfree的具体实现,这样就可以发现kmalloc是如何记录信息,而kfree如何原作了。

作者: gradetwo   发布时间: 2006-08-17

引用:
作者: gradetwo
楼主可以参考下 内核中mm/slab.c中kmalloc,kfree的具体实现,这样就可以发现kmalloc是如何记录信息,而kfree如何原作了。
Thanks,正在看!

作者: jiyongguang   发布时间: 2006-08-17

引用:
作者: zhllg
不过也不怪你,整个中国都这么浮躁
晕, zhllg 兄什么时候也成愤青了?
浮躁的人是很多,but,还是有很多静心做学问的,王小云教授便是其中之一

作者: rickxbx   发布时间: 2006-08-17

那是自然
不过大环境似乎不是那么令人乐观(比如北大与丘成桐一事)

作者: zhllg   发布时间: 2006-08-17

热门下载

更多