#内存管理的艺术# 之 Nginx slab的实现 --- 第五篇“基于页的内存释放”
访问 这里 ,获取更多原创内容。 说明:本系列的文章基于Nginx-1.5.0版本代码。 在 上一篇 ”基于块的内存释放“中,我们已经见过一个函数: static void ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page, ngx_uint_t pages); 单从名字应该就已经能够猜到这个函数的作用了,没错,就是本篇的主题 --- ”基于页的内存释放“,当释放的内存类型为”NGX_SLAB_PAGE “,或者与待释放的内存块所对应的页已经完全释放时,就到了这个函数大显身手的时候了,但它的内容却只有短短的十几行代码: static void ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page, ngx_uint_t pages) { ngx_slab_page_t *prev; page->slab = pages--; /*如果待释放的内存空间不止一页,则需要将后续的页管理单元恢复为初始化状态*/ if (pages) { ngx_memzero(&page[1], pages * sizeof(ngx_slab_page_t)); } /*根据前面几篇的内容可以知道,当页内存管理单元挂接在slot分级链表下时,page-