FreeBSD kernel malloc

来源:互联网 发布:java api帮助文档 编辑:程序博客网 时间:2024/05/22 06:30

  FreeBSD kernal malloc 是通过 zone allocaotor 实现的。其基本思想就是,创建一些较小内存的 zones ,以供小内存分配;在分配较大内存时,使用 uma_large_malloc 。

 

  kmeminit 进行一些初始化动作,包括初始化那些存储较小内存的 zones 。

  void *malloc(unsigned long size, struct malloc_type *mtp, int flags); 分配内存时,需要一个 struct malloc_type 类型的参数,该实参保存了分配信息。malloc_init 和 malloc_uninit 构造和析够一个 "struct malloc_type",malloc_uninit 检查是否存在内存泄漏。

  malloc 根据要分配的内存大小,决定从 kmemzones 中创建的 zones 分配,还是通过 uma_large_malloc 分配。free 根据 slab 标志,得出 addr 是如何分配的,并以对应的方式释放之。

   realloc  根据新大小和旧大小的大小关系,决定是分配新的内存还是重用旧的内存。

 

参考文章:

  • FreeBSD malloc(9) manual page
原创粉丝点击