Thank you, Vladimir.<br><br>You've made things clear. Now I've got it. <br><br><div class="gmail_quote">2012/6/30 Vladimir Shebordaev <span dir="ltr"><<a href="mailto:vshebordaev@mail.ru" target="_blank">vshebordaev@mail.ru</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi!<br>
<br>
2012/6/30 naquad <<a href="mailto:naquad@gmail.com">naquad@gmail.com</a>>:<br>
<div class="im">><br>
> I'm trying to figure out how does nginx manage its memory per request. From<br>
> what I understand it uses region-based memory management (implemented in<br>
> src/core/ngx_palloc.{h,c}).<br>
> But is there any documentation on details of its implementation and<br>
> algorithm itself?<br>
<br>
</div>Basically, the pool memory allocator in nginx is not that complicated,<br>
so I guess there is no dedicated document.<br>
<div class="im"><br>
> I've tried to just read through sources, but I can't get figure algorithm<br>
> out of them :(<br>
> Could somebody please sched some light on this?<br>
><br>
<br>
</div>As per core/ngx_palloc.h, the pool is nothing but a list of memory<br>
chunks named as blocks described by embedded ngx_pool_data_t .<br>
<br>
Regular allocations get the memory from the current chunk.<br>
<br>
When the requested amount of memory does fit neither into current<br>
chunk nor into other partially full chunks but still has a modest size<br>
- the one specified at pool creation time either the system page size,<br>
whichever is smaller, -  new memory block is requested from the<br>
system, put on the list of chunks and installed as the current chunk<br>
for regular allocations.<br>
<br>
When the amount of memory is requested that is larger than p->max,<br>
i.e. the one specified at pool creation time either the system page<br>
size, whichever is smaller, it is allocated directly from the system<br>
with ngx_alloc and put on p->large list.<br>
<br>
Please notice, the pool allocator in nginx is specifically designed<br>
for speed and efficiency, it doesn't store the information about<br>
particular allocations neither allocated objects bear such<br>
information. So, the only mean to reclaim memory is to destroy the<br>
pool.<br>
<br>
When you allocate from  pool the objects having accotiated system<br>
resources that are to be released along with the object itself, e.g.<br>
file buffers, you can install a cleanup handler that is to be invoked<br>
at pool destruction time.<br>
<br>
> Thank you.<br>
><br>
<br>
In the hope it helps.<br>
<br>
Regards,<br>
Vladimir<br>
<br>
_______________________________________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br>
</blockquote></div><br>