高性能内存池设计【Nginx高性能内存池源码分析】

文章通过分析Nginx内存池的源码,详细解释了内存池的工作原理,包括创建、分配和销毁过程。通过对比传统C语言的malloc和内存池在分配大量内存时的性能,强调了内存池在提高程序运行效率方面的作用。此外,还提供了内存池的使用示例和释放大内存块的方法。

🚀高性能内存池Nginx内存池源码分析

对于内存池不是很了解的小伙伴可以先看这两篇文章👇
1.内存池框架
2.传统内存管理的弊端和解决方案

在这里插入图片描述


🍎应用内存池源码

在这里写了个main方法来调用内存池的各个方法,运行的场景是动态分配500*1024*1024次内存,对比正常使用c语言的malloc和使用内存池进行内存分配的时间,看main方法👇。

#include "mem_core.h"
#define BLOCK_SIZE  16   		 //每次分配内存块大小

#define MEM_POOL_SIZE (1024 * 4) //内存池每块大小

int main(int argc, char **argv)
{
   
   
	int i = 0, k = 0;
	int use_free = 0;
	
	//获得页的的大小
	ngx_pagesize = getpagesize();

	//如果参数数目≥2则使用传统方法
	if(argc >= 2){
   
   
		use_free = 1;
		printf("use malloc/free\n");		
	} 
	//否则使用内存池
	else {
   
   
        printf("use mempool.\n");
    }

	if(!use_free){
   
   
	    char * ptr = NULL;
	
	    for(k = 0; k< 1024 * 500; k++)
	    {
   
   
			//创建内存池
	        ngx_pool_t * mem_pool = ngx_create_pool(MEM_POOL_SIZE);
		    
			for(i = 0; i < 1024 ; i++)
			{
   
   
				//在内存池中分配内存
				ptr = ngx_palloc(mem_pool,BLOCK_SIZE);

				if(!ptr) fprintf(stderr,"ngx_palloc failed. \n");
				else {
   
   
					*ptr = '\0';
					*(ptr + BLOCK_SIZE -1) = '\0';
				}
			}
		    //销毁内存池
            ngx_destroy_pool(mem_pool);
	    }
	} else {
   
   
	    char * ptr[1024];
	    for(k = 0; k< 1024 * 500; k++){
   
   
			for(i = 0; i < 1024 ; i++)
			{
   
   
				ptr[i] = <
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值