谈到高性能编程,我们绕不过一个问题高效内存分配,通常我们会使用malloc和free函数来申请和释放内存。
那么我们习以为常的malloc和free函数,真的能满足高性能编程的要求吗?
带着这个问题我们来深入理解malloc和free函数实现原理。
1.ptmalloc工作原理
malloc和free函数属于glibc库的ptmalloc模块,我们得通过学习glibc源码了解ptmalloc工作原理。源码位置:glibc/malloc/malloc.c。
1.1 ptmalloc软件架构
ptmalloc内存池是一个比较复杂的软件模块,会涉及到malloc_state,malloc_chunk,mmap,brk等概念。
ptmalloc通过brk(堆内存)或者mmap(内存映射)系统调用从内核申请一大块连续的内存,申请的内存由top chunk管理,用户程序调用malloc