[alibaba/tengine]ngx_array_destroy 函数存在的必要性

2024-07-10 761 views
7

既然内存的管理采用了内存池,那么依赖于内存池实现的容器其实应该不用自己来做释放操作!也许还会打乱内存池管理的一些指针!

回答

5

void ngx_array_destroy(ngx_array_t *a);

销毁ngx_array_t *a对象,并释放其分配的内存回内存池

我们试想一种情况:

在r的生命周期内,某个NGINX模块需要不断地申请和释放数组对象;

如果不在数组销毁时就回收内存池,很有可能造成后续的模块内存资源使用受限,因为我们还在r的生命周期内,无法通过内存池本身的回收来收回数组对象所占用的内存资源;

从ngx_array_destroy()的函数定义来看, 其实它也正是在通过计算"p->d.last"来完成数组对象内存的回收和再利用。

wish to be helpful

2

hi @hejindan 这个接口只在极限情况下非常有用,可以参考 @hongxiaolong 所说。 其实nginx里面只定义了此接口,也没有实际调用过。

0

@chobits @hongxiaolong
ok thx!

1

好的,你的问题应该已完结,

我关闭了该issue,如果有问题可以再打开

2

这个函数貌似定义的也有问题。看上去是每个array自带一个pool,否则释放的时候会有问题。