内存管理
文章平均质量分 68
zero_lee
这个作者很懒,什么都没留下…
展开
-
glibc ptmalloc中的宏操作
glibc ptmalloc很有意思的宏操作:1.MORECORE/* Definition for getting more memory from the OS. */#define MORECORE (*__morecore)#define MORECORE_FAILURE 0void * __default_morecore (ptrdiff_t);voi原创 2012-08-14 15:59:50 · 1391 阅读 · 0 评论 -
ptmalloc代码浅析3
malloc_consolidate函数是将fast bins中所有链表中相邻空闲chunk合并之后放入到unsorted chunk链表中。注意fd/bk是用来获取前后空闲chunk的指针域,而要获取前后相邻chunk,需要借助宏next_chunk/prev_chunk。 /* If max_fast is 0, we know that av hasn't yet原创 2012-08-14 16:11:35 · 1716 阅读 · 1 评论 -
ptmalloc代码浅析1
ptmalloc实现分析:1. 在ptmalloc中,并没有定义malloc函数,而是定义了__libc_malloc(size_t nbytes);这样操作是为了不同平台。相应的free函数是__libc_free(void* mem);2. __libc_malloc函数void*__libc_malloc(size_t bytes){ mstate ar_ptr; //原创 2012-08-14 16:08:53 · 3527 阅读 · 1 评论 -
ptmalloc代码浅析2(small bin/large bin结构图)
ptmalloc中的small bin和large bin维护着不同结构的chunk链表:1. 每个small bin维护着一个双向循环链表,而且chunk size都相同。当allocate memory时,总是从链表尾端unlink一个chunk,deallocate memory时,将那个chunk link到链表头。属于FILO规则,每个chunk都有机会被分配到app。原创 2012-08-14 16:09:54 · 5017 阅读 · 0 评论 -
[Happy GLIB] glib的slab算法实现学习
slab提出来是为了解决内部内存碎片的问题,在linux内核中与buddy system一起来解决内核内存管理。但是要看懂slab在linux内核中的实现当前有些困难,我们不如拿些容易阅读的代码来了解slab算法的运作过程。GLIB库实现非常clear,可以做为slab算法的实现学习的入门。slab在GLIB中的实现相关文件是gslice.h/c,但是在这个实现文件中,有更复杂的,支持多线程更原创 2012-08-14 13:44:06 · 3729 阅读 · 0 评论 -
[Happy Coding] malloc/kmalloc/vmalloc/slab cache/__get_free_page
1. malloc/freemalloc/free是C库函数,用来给用户态程序分配和释放内存,处理的内存地址是虚拟地址。能够保证虚拟地址是连续的,但不能保证物理地址是连续。glibc调用brk(sbrk)/mmap系统函数来实现内存的分配。2. kmalloc/kfreekmalloc/kfree是linux内核定义的函数,只能被内核态程序调用,用来给内核程序分配和释放内存。k原创 2012-08-14 16:03:41 · 1706 阅读 · 0 评论