内存控制的好,程序就稳定,一个好的内存设计,为一个牛逼的发动机提供资源。
使用内存的时候,从ngx_pool_t
中获取内存。
不使用的时候,只需要销毁ngx_pool_t
对象即可,相关联的内存都被释放完毕。
也就是说ngx_pool_t
对象就算一个内存的管家,你需要用的时候向它登记就行,不用操心申请啊,释放啊等操作,很方便。
struct ngx_pool_s {
ngx_pool_data_t d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};
ngx_create_pool(size_t size, ngx_log_t *log)
创建一个初始节点大小为size
的pool
。并且size的大小必须小于等于NGX_MAX_ALLOC_FROM_POOL
,且必须大于sizeof(ngx_pool_t)
NGX_MAX_ALLOC_FROM_POOL
大小为 (ngx_pagesize - 1),在x86上,ngx_pagesize
大小为4096。
之所以是4096,是因为寻址页面大小是4096,这个数值的设定可以照顾到大多数情况的内存使用情景,太大和太小都不是很适合。至于为何是这个数,应该是和处理器架构有关系。
size的大小必须小于等于NGX_MAX_ALLOC_FROM_POOL,且必须大于sizeof(ngx_pool_t)。因为大了寻址寻不到白白浪费空间。
nginx内存结构图
网友评论