main -> ngx_save_argv
创造一个包含argc个地址空间的数组ngx_argv,然后为ngx_argv每个地址空间分配argv[i]大小的空间,并将argv[i]拷贝入ngx_argv[i]指向的地址空间
main -> ngx_process_options
调用ngx_pnalloc,在内存池中找到一块ngx_prefix大小的空间
onginx内存池分配机制:
内存池pool的数据结构中包含两个链表,一个是ngx_pool_t链表(存放一般block),一个是ngx_large_pool_t链表(存放large block),初始化时pool只有一个大小为1024的节点,current指向这个节点,large链表为空
current pool指向第一个链表,分配时在这个链表中找到足够存放size大小内容的一个节点(block)
如果没在current pool中找到,从pool current指向的节点(block)开始遍历,找到一个节点(block)其d.next为空,将新分配的内存放置在这个位置
如果需要的空间大于pool中单个节点的最大值时,
遍历pool中的large链表,找到一个large block非空时,判断large->alloc如果为空,将所需空间大小的内存放置于此,否则,查看下一个large block,
如果4次找到的large block都非空,分配一个新的large block,置于pool中large链表头部
时间: 2024-10-28 11:00:19