高并发下传统方式的弊端
C语言常用的内存操作函数
C++下采用new进行内存分配,delete进行内存释放。
弊端一
分配内存需要进入内核态,总分配大小不变的情况下,多次分配较小的内存导致了变态频繁,降低系统效率.
弊端二
弊端三
情形1调用了malloc函数没有调用free回收
情形2调用了fopen没有调用fclose方法回收内存
弊端四
弊端解决之道
高并发内存管理最佳实践
内存池技术
高效内存池设计与实现
实现思路(分而治之)
Nginx内存池结构图
如上图所示
第一个分配模块有一些附加信息
关键数据结构
为什么要设置failed参数?
当failed次数超过一定值,表明该内存块有难以利用的内部碎片,分配内存时不考虑该内存块
current指针是干嘛的?
current指针一开始指向首个分配模块,当首个分配模块的failed值超过某个值时,current会指向下一块,以此类推.......优先从current指针指向的分配模块分配内存。
ngx_pool_t 结构示意图
Ngix内存池基本操作