elt = (ngx_hash_elt_t *) ngx_align_ptr(&elt->name[0] + elt->len, sizeof(void *)); continue; } return NULL; } 2. 创建一个hash表 ngx_hash_init 获取元素大小的宏定义。 /** * 获取元素的大小 * 元素大小主要是ngx_hash_elt_t结构,包括: * 1. name的长度 (name)->key.len * 2...
(ngx_pool_data_t); m = ngx_align_ptr(m, NGX_ALIGNMENT); new->d.last = m + size; current = pool->current; /** * 缓存池的pool数据结构会挂载子节点的ngx_pool_t数据结构 * 子节点的ngx_pool_t数据结构中只用到pool->d的结构,只保存数据 * 每添加一个子节点,p->d.failed就会+1,当...
m += sizeof(ngx_pool_data_t); //实际上 只使用了ngx_pool_data_t的大小 虽然转换为ngx_pool_t 根据结构体对齐 m = ngx_align_ptr(m, NGX_ALIGNMENT);// 指针对齐 new->d.last = m + size; // 更新下一次的地址 current = pool->current; for (p = current; p->d.next; p = p->d....
#define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1)) 1 #define ngx_align_ptr(p, a) \ 1 (u_char *) (((uintptr_t) (p) + ((uintptr_t) a - 1)) & ~((uintptr_t) a - 1) 应用场景是 m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT); http://www.oschina.n...
1、ngx_align_ptr。这是一个用来内存地址取整的宏。很静止,一句话就搞定了。作用不言而喻,取整能够减少CPU读取内存的次数,提高性能。由于这里并没有真正意义调用malloc等函数申请内存,而是移动指针标记而已,所以内存对齐的活,C编译器帮不了你了,得自己动手。
static ngx_inline void * ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align) { u_char *m; ngx_pool_t *p; p = pool->current; do { m = p->d.last; if (align) { m = ngx_align_ptr(m, NGX_ALIGNMENT); } if ((size_t) (p->d.end - m) >= size) { ...
m = ngx_align_ptr(m, NGX_ALIGNMENT); new->d.last = m + size; // 将第一个链表节点用于操作链表的pool指针的current变量指向当前节点 for (p = pool->current; p->d.next; p = p->d.next) { if (p->d.failed++ > 4) { pool->current = p->d.next; ...
参考ngx_align 值对齐宏 分析,ngx_align_ptr同理 创建内存池 max 的最大值为 4095,当从内存池中申请的内存大小大于 max 时,不会从小块内存中进行分配。 AI检测代码解析 ngx_uint_t ngx_pagesize = getpagesize(); // Linux 上是 4096 #define NGX_POOL_ALIGNMENT 16 ...
比如按照4个字节对齐,内存已经使用了14字节,那么都当作已经用完了16个字节,从这后面再开始使用 m = ngx_align_ptr(m, NGX_ALIGNMENT); } if ((size_t) (p->d.end - m) >= size) {//如果当前小块有空间可以分配,那么就返回内存可分配的起始地址 p->d.last = m + size; return m; } p = p...
(void *) sr_ctx == ngx_align_ptr(sr_ctx, sizeof(void *))); p += ofs2; psr_data = (ngx_http_lua_post_subrequest_data_t *) p; ngx_http_lua_assert((void *) psr_data == ngx_align_ptr(psr_data, sizeof(void *))); ngx_memzero(sr_ctx, sizeof(ngx_h...