本节我们主要讲述一下nginx中数组的实现。
1. core/ngx_array.h头文件
下面对ngx_array.h头文件各部分做一个简单的解释:
1.1 nginx中数组数据结构
请参看下图:
1.2 相关函数声明
1.3 函数ngx_array_init()
这里为数组从pool内存池中分配对应的空间,并初始化数组。
2. core/ngx_array.c源文件
2.1 函数ngx_array_create()
这里首先分配ngx_array_t *
数据结构分配内存空间,然后再初始化该数组。
2.2 函数ngx_array_destroy()
这里将从内存池分配的数据归还给内存池。
2.3 函数ngx_array_push()
这里主要需要注意的是,在当前数据元素个数达到总容量时,如何分配内存:
- 如果该数组所绑定的内存池可分配的内存正好在原数组空间的后边,且还有剩余的空间可分配,则直接分配即可
- 如果该数组所绑定的内存池后续没有空间可分配,则需要在该内存池中另寻另一块空间来分配,并且分配的容量扩大一倍
1.4 函数ngx_array_push_n()
本函数与ngx_array_push()
类似,这里不再赘述。