专业的编程技术博客社区

网站首页 > 博客文章 正文

Linux服务器开发中Nginx——内存池

baijin 2024-12-01 07:59:27 博客文章 4 ℃ 0 评论

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

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

数据结构:

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

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

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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表