Zeev Suraski wrote:

> At 12:55 AM 6/9/2002, Brian Pane wrote:
>
>> I just looked through zend_alloc.c.  It looks like the HeapCreate only
>> happens once, at startup--did I get that right?
>
>
> It's called on the per-thread startup (start_memory_manager(), which 
> is called from alloc_globals_ctor(), which is the per-thread 
> allocation 'constructor').
>
>>  For PHP processing, do
>> you need a memory heap that is created at startup and used by all 
>> requests,
>> or is it sufficient to create and destroy a private heap for each 
>> request?
>
>
> We can go either way, but won't allocating and freeing these heaps 
> increase fragmentation?  Remember that PHP functions will also 
> allocate memory outside these heaps (in 3rd party libraries). 


In the httpd, we've done two things to minimize the fragmentation:
  * Memory for these heaps is almost always allocated in chunks of
    a fixed size, 8KB.
  * There's a two-layer structure to the heaps:
      - apr_pool objects are what the application uses.  Each pool
        provides a fast alloc interface, no free function, and a
        "destructor" that returns all the allocated space when the
        pool is destroyed.
      - apr_allocator objects provide blocks of memory for the
        apr_pools to use.  Each apr_allocator maintains a free
        list of blocks.  When a pool is destroyed, its space is
        returned to the apr_allocator from which it was created.
        The next time we create a pool from that apr_allocator,
        we can take an 8KB block from that allocator's free list
        rather than interacting with the system heap.

--Brian



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to