7.3 ngx_array_t动态数组

ngx_array_t是一个顺序容器,它在Nginx中大量使用。ngx_array_t容器以数组的形式存储元素,并支持在达到数组容量的上限时动态改变数组的大小。

7.3.1 为什么设计ngx_array_t动态数组

数组的优势是它的访问速度。由于它使用一块完整的内存,并按照固定大小存储每一个元素,所以在访问数组的任意一个元素时,都可以根据下标直接寻址找到它,另外,数组的访问速度是常量级的,在所有的数据结构中它的速度都是最快的。然而,正是由于数组使用一块连续的内存存储所有的元素,所以它的大小直接决定了所消耗的内存。可见,如果预分配的数组过大,肯定会浪费宝贵的内存资源。那么,数组的大小究竟应该分配多少才是够用的呢?当数组大小无法确定时,动态数组就“登场”了。

C++语言的STL中的vector容器就像ngx_array_t一样是一个动态数组。它们在数组的大小达到已经分配内存的上限时,会自动扩充数组的大小。具备了这个特点之后,ngx_array_t动态数组的用处就大多了,而且它内置了Nginx封装的内存池,因此,它分配的内存也是在内存池中申请得到。ngx_array_t容器具备以下3个优点:

❑访问速度快。

❑允许元素个数具备不确定性。

❑负责元素占用内存的分配,这些内存将由内存池统一管理。