内存分配相关
来源:互联网 发布:卖域名的 编辑:程序博客网 时间:2024/05/31 18:53
1. 系统功能封装
内存相关的操作主要在 os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c} 下
其中 os/unix/ngx_alloc.{h,c} 封装了最基本的内存分配函数,是对c原有的malloc/free/memalign 等原有的函数的封装,对应的函数为:
- ngx_alloc 使用malloc分配内存空间
- ngx_calloc 使用malloc分配内存空间,并且将空间内容初始化为0
- ngx_memalign 返回基于一个指定的alignment大小的数值为对齐基数的空间
- ngx_free 对内存的释放操作
2. ngx的内存池
为了方便系统模块对内存的使用,方便内存的管理,nginx自己实现了进程池的机制来进行内存的分配和释放, 首先nginx会在特定的生命周期帮你统一建立内存池,当需要进行内存分配的时候统一通过内存池中的内存进行分配,最后nginx会在适当的时候释放内存池的资源,开发者只要在需要的时候对内存进行申请即可,不用过多考虑内存的释放等问题,大大提高了开发的效率。
内存池的主要结构为:
typedef struct { u_char *last; //当前内存池分配到此处,即下一次分配从此处开始 u_char *end; //内存池结束位置 ngx_pool_t *next; //内存池里面有很多块内存,这些内存块就是通过该指针连成链表的 ngx_uint_t failed; //内存池分配失败次数} ngx_pool_data_t; //内存池的数据块位置信息struct ngx_pool_s { //内存池头部结构 ngx_pool_data_t d; //内存池的数据块 size_t max; //内存池数据块的最大值 ngx_pool_t *current; //指向当前内存池 ngx_chain_t *chain; //该指针挂接一个ngx_chain_t结构 ngx_pool_large_t *large; //大块内存链表,即分配空间超过max的内存 ngx_pool_cleanup_t *cleanup; //释放内存池的callback ngx_log_t *log; //日志信息}; 其中,sizeof(ngx_pool_data_t)=16B,sizeof(ngx_pool_t)=40B。
- 内存分配相关
- C++内存分配相关
- 0629动态内存分配相关
- 内存分配指针相关1
- DLL内存分配相关问题
- 【面试珠玑】内存分配相关
- 内存分配相关,new , GlobalAlloc, VirtualAlloc, HeapAlloc
- Java内存分配相关资料的收集
- Java内存分配相关资料的收集
- Java中内存分配相关知识收集
- Java内存分配相关资料的收集
- 内存分配相关,new , GlobalAlloc, VirtualAlloc, HeapAlloc
- 【编程范式】 编译原理相关内存分配
- linux C 内存分配相关知识
- 内存分配、野指针、指针、数组相关
- brk和sbrk及内存分配函数相关-linux+内存
- brk和sbrk及内存分配函数相关
- brk和sbrk及内存分配函数相关
- ExtJS时间扩展控件(显示年月日时分秒)
- poj1061欧几里德算法
- 《编程之美》2.12 快速寻找满足条件的两个数(预排序)
- android 本地SharedPreferences存储到使用sqlite数据库存储的转换
- 【转】SQL2005无法启动SQL Server 请求失败或服务未及时响应等问题的解决方案
- 内存分配相关
- 5天学会一种 web 开发框架
- IOS 推送消息 php做推送服务端
- 在windows平台删除mysql和apache服务
- 冒泡双向排序
- hudson与SVN安装配置
- [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(14)完全删除oracle
- 数组指针与指针数组的结合运用
- Oracle HowTo:如何在Oracle10g中启动和关闭OEM