Nginx中 --- 内存池

首先什么是内存池,为什么会有内存池,内存池解决了什么问题??

          在nginx中每个http请求和每个tcp、udp都会去创建一个内存池,以后再处理过程中所有用到的内存都是从内存池中申请的;Nginx的内存池区分大内存块和小内存块,以一个内存页面为准,如果小于一个内存页面(getpagesize)则是小内存块,从内存池中直接申请,否则直接调用malloc去申请内存块;在释放内存的时候,nginx没有专门提供针对释放小块内存的函数,小块内存会在ngx_destory_pool 和 ngx_reset_pool的时候一并释放。

数据结构:

Nginx中 --- 内存池

申请后的内存分配关系图:

Nginx中 --- 内存池

内存池中维护两个链表,一个大块,一个小块

提前创建好后,缓解了,下次分配的时间,只需要简单的判断就可取出想要的内存块

Nginx中 --- 内存池

调用posix_memalign( )成功时会返回size字节的动态内存,并且这块内存的地址是alignment的倍数。

参数alignment必须是2的幂,还是void指针的大小的倍数。返回的内存块的地址放在了memptr里面,函数返回值是0.