496-nginx内存池(palloc创建函数create pool)

nginx内存池(palloc创建函数)

我们分析palloc.h

在这里插入图片描述
第1个宏的名字意思是:能从池里分配的最大内存(4096字节)(4k)
也就是说,对于nginx,小块内存和大块内存区分的界线是1个页面(4096)(因为nginx是http服务器,面对所有的模块提供的,所以分界线值比较大,而SGI STL是给C++STL管理容器底层用的)
第2个宏的名字意思是:默认的池的大小(16k)
第3个宏的名字意思是: 内存池内存分配的字节对齐的数字
第4个宏的名字意思是:内存池中最小的大小
我们进去看看ngx_align函数
在这里插入图片描述
这个似曾相识,和SGI STL的相似,作用是把内存的开辟调整到临近a(16)的倍数。

相关函数的接口:
在这里插入图片描述

内存池结构体

在这里插入图片描述
这个结构体对应的图:
在这里插入图片描述

第1个成员是内存池的头信息。
在这里插入图片描述
在这里插入图片描述

创建函数create pool

在这里插入图片描述
我们进去ngx_memalign看看
宏定义,判断要不要内存对齐:
在这里插入图片描述
我们进去看看:
在这里插入图片描述
在这里插入图片描述
下面这句代码,根据用户指定的大小来开辟内存池,可以根据不同系统平台定义的宏调用不同系统平台,如果没有定义的话,其实就是调用底层的malloc函数
在这里插入图片描述
如果申请失败:
在这里插入图片描述
如果申请成功:
在这里插入图片描述
如下图所示:
整个大小就是用户传入的size(1024),而且要存储头信息。
在这里插入图片描述
空白的部分是用户使用的。

然后执行:
在这里插入图片描述
总大小-内存池头部信息=用户可以使用的真实的大小。
p->max就是说ngx_create_pool(size)中的可用空间size如果大于等于4095(1个页面)的话,取的就是4095(一个页面),否则的话就取size。这是维护nginx小块内存的操作。

所以max就是存储当前小块内存的分配的最大值
current指针指向内存的起始地址,指向当前块。
在这里插入图片描述
然后返回新创建的内存池的起始地址p

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值