首页 > 编程知识 正文

nginx笔记,NGinx

时间:2023-05-05 04:56:14 阅读:267603 作者:4557

nginx通过内存池来管理所申请的内存,通过维护内存池,保证程序执行的效率以及避免造成内存泄漏。

ngx_palloc.h:

#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)#define NGX_DEFAULT_POOL_SIZE (16 * 1024)#define NGX_POOL_ALIGNMENT 16#define NGX_MIN_POOL_SIZE ngx_align((sizeof(ngx_pool_t) + 2 * sizeof(ngx_pool_large_t)), NGX_POOL_ALIGNMENT) #define ngx_align(d,a) (((d) + (a - 1)) & ~(a - 1)) typedef void (*ngx_pool_cleanup_pt)(void *data);typedef struct ngx_pool_cleanup_s ngx_pool_cleanup_t;struct ngx_pool_cleanup_s { ngx_pool_cleanup_pt handler; void *data; ngx_pool_cleanup_t *next;}; typedef struct ngx_pool_large_s ngx_pool_large_t;struct ngx_pool_large_s { ngx_pool_large_t *next; void *alloc;}; typedef struct { u_char *last; u_char *end; ngx_pool_t *next; ngx_uint_t failed;} ngx_pool_data_t; typedef struct { ngx_fd_t fd; u_char *name; ngx_log_t *log;} ngx_pool_cleanup_file_t;

内存池创建和销毁较为简单,主要在申请超过一页内存时,nginx是直接向操作系统申请,而不是从pool里申请;而ngx_palloc与ngx_pnalloc的区别在于申请之后是否进行了内存对齐

m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);

即ngx_pnalloc是直接从p->d.last开始。


上图是从Linux公社摘取的图片
linux公社的这篇文章写的很清晰,就不再做详细介绍了

销毁内存池的时候,由于cleanup的内存块是从pool里面分配的,因此不需要去free其中的内存了,直接销毁整个内存池即可。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。