Resource management is a crucial issue, especially in server
software. One of the most valuable resources is memory, and memory management
should be handled with extreme care. Memory management has been partially
abstracted in Zend, and you should stick to this abstraction for obvious
reasons: Due to the abstraction, Zend gets full control over all memory
allocations. Zend is able to determine whether a block is in use,
automatically freeing unused blocks and blocks with lost references, and
thus prevent memory leaks. The functions to be used are described in the following table:
emalloc(),
estrdup(),
estrndup(),
ecalloc(), and
erealloc() allocate
internal memory;
efree() frees these previously allocated
blocks. Memory handled by the
e*() functions is considered local to the current process and is discarded as soon as the
script executed by this process is terminated.
Varovßnφ |
To allocate resident memory that survives termination of the
current script, you can use malloc() and
free(). This should only be done with extreme care, however, and
only in conjunction with demands of the Zend API; otherwise, you risk
memory leaks. |
Zend also features a thread-safe resource manager to
provide better native support for multithreaded Web servers. This requires you
to allocate local structures for all of your global variables to allow
concurrent threads to be run. Because the thread-safe mode of Zend is not
finished yet, we could not include coverage in this book.