Switch branches/tags
yaf-2.1.0 xmlrpc_epi_0_51_merge_pt php5_5_0 php4 php_ibase_before_split oci8-1.4.3 oci8-1.4.0 init help dev before-sapi-split ZO_B1 ZEND_OPTIMIZER_B1 SQLITE_4_3_20041227 SPL_ALPHA SAFEGUARD_3_0_BETA1_RC1_26062002 RETURN_REF_BP RELEASE_2_0_2 RELEASE_2_0_1 RELEASE_2_0_0 RELEASE_2_0_0b1 RELEASE_2_0_0a2 RELEASE_2_0_0a1 RELEASE_2_0_0RC1 RELEASE_1_5 RELEASE_1_4 RELEASE_1_3_5 RELEASE_1_3_1 RELEASE_1_3 RELEASE_1_3b6 RELEASE_1_3b3 RELEASE_1_3b2 RELEASE_1_2_5 RELEASE_1_2_4 RELEASE_1_2_3 RELEASE_1_2_2 RELEASE_1_2_1 RELEASE_1_2_0 RELEASE_1_2 RELEASE_1_2b5 RELEASE_1_1_1 RELEASE_1_1_0 RELEASE_1_1 RELEASE_1_0_4 RELEASE_1_0_3 RELEASE_1_0_2 RELEASE_1_0_1 RELEASE_1_0_0RC1 RELEASE_1_0 RELEASE_1_0b3 RELEASE_1_0b2 RELEASE_1_0b1 RELEASE_1_0RC2 RELEASE_1_0RC1 RELEASE_0_91 RELEASE_0_90 RELEASE_0_11 RELEASE_0_10 RELEASE_0_9_4 RELEASE_0_9_3 RELEASE_0_9_2 RELEASE_0_9_1 RELEASE_0_9_0 RELEASE_0_9 RELEASE_0_9b RELEASE_0_7 RELEASE_0_6 RELEASE_0_5_3 RELEASE_0_5_2 RELEASE_0_5 RELEASE_0_4 RELEASE_0_3 RELEASE_0_2_4 RELEASE_0_2_3 RELEASE_0_2_2 RELEASE_0_2_1 RELEASE_0_2_0 RELEASE_0_2 RELEASE_0_1_1 RELEASE_0_1 PRE_ZEND_VM_DISPATCH_PATCH PRE_USED_RETURN_VALUE_PATCH PRE_TSRM_MERGE_PATCH PRE_SUBST_Z_MACROS PRE_RETURN_REF_PATCH PRE_RETURN_REF_MERGE PRE_PARAMETER_PARSING_API PRE_NEW_VM_GEN_PATCH PRE_NEW_OCI8_EXTENSION PRE_METHOD_DEREFERENCE_PATCH PRE_METHOD_CALL_SEPERATE_FIX_PATCH PRE_LIBZEND_TO_ZEND PRE_LIBMYSQL_REVERT PRE_ISSET_TYPE PRE_ISSET_PATCH PRE_GRANULAR_GARBAGE_FIX PRE_FUNC_RETURNS_OBJECT_PATCH PRE_FILE_COMPILE_API_CHANGE PRE_FETCH_READ_PATCH PRE_ENGINE2_SPLIT
Nothing to show
Find file History
Pull request Compare This branch is 34425 commits behind php:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
..
Failed to load latest commit information.
RFCs
tests
ChangeLog
LICENSE
Makefile.am
Makefile.frag
OBJECTS2_HOWTO
README.ZEND_MM
README.ZEND_VM
ZEND_CHANGES
Zend.dsp
Zend.m4
ZendCore.dep
ZendTS.dsp
acinclude.m4
bench.php
build.mk
buildconf
configure.in
header
micro_bench.php
zend.c
zend.h
zend.ico
zend_API.c
zend_API.h
zend_alloc.c
zend_alloc.h
zend_build.h
zend_builtin_functions.c
zend_builtin_functions.h
zend_closures.c
zend_closures.h
zend_compile.c
zend_compile.h
zend_config.nw.h
zend_config.w32.h
zend_constants.c
zend_constants.h
zend_default_classes.c
zend_dtrace.c
zend_dtrace.d
zend_dtrace.h
zend_dynamic_array.c
zend_dynamic_array.h
zend_errors.h
zend_exceptions.c
zend_exceptions.h
zend_execute.c
zend_execute.h
zend_execute_API.c
zend_extensions.c
zend_extensions.h
zend_float.c
zend_float.h
zend_gc.c
zend_gc.h
zend_globals.h
zend_globals_macros.h
zend_hash.c
zend_hash.h
zend_highlight.c
zend_highlight.h
zend_indent.c
zend_indent.h
zend_ini.c
zend_ini.h
zend_ini_parser.y
zend_ini_scanner.c
zend_ini_scanner.h
zend_ini_scanner.l
zend_ini_scanner_defs.h
zend_interfaces.c
zend_interfaces.h
zend_istdiostream.h
zend_iterators.c
zend_iterators.h
zend_language_parser.y
zend_language_scanner.c
zend_language_scanner.h
zend_language_scanner.l
zend_language_scanner_defs.h
zend_list.c
zend_list.h
zend_llist.c
zend_llist.h
zend_modules.h
zend_multibyte.c
zend_multibyte.h
zend_multiply.h
zend_object_handlers.c
zend_object_handlers.h
zend_objects.c
zend_objects.h
zend_objects_API.c
zend_objects_API.h
zend_opcode.c
zend_operators.c
zend_operators.h
zend_ptr_stack.c
zend_ptr_stack.h
zend_qsort.c
zend_qsort.h
zend_signal.c
zend_signal.h
zend_sprintf.c
zend_stack.c
zend_stack.h
zend_static_allocator.c
zend_static_allocator.h
zend_stream.c
zend_stream.h
zend_string.c
zend_string.h
zend_strtod.c
zend_strtod.h
zend_ts_hash.c
zend_ts_hash.h
zend_types.h
zend_variables.c
zend_variables.h
zend_vm.h
zend_vm_def.h
zend_vm_execute.h
zend_vm_execute.skl
zend_vm_gen.php
zend_vm_opcodes.h

README.ZEND_MM

Zend Memory Manager
===================

General:
--------

The goal of the new memory manager (available since PHP 5.2) is to reduce memory
allocation overhead and speedup memory management.

The new manager's "configure" has no "--disable-zend-memory-manager" option,
but it has "--enable-malloc-mm" instead.  It is enabled by default in DEBUG
build and disabled by default in RELEASE build. When enabled it allows selecting
between malloc and emalloc at runtime so you can use internal and external memory
debuggers without recompilation.

Debugging:
----------

Normal:

    $ sapi/cli/php -r 'leak();'

Zend MM disabled:

    $ USE_ZEND_ALLOC=0 valgrind --leak-check=full sapi/cli/php -r 'leak();'

Shared extensions:
------------------

Since PHP 5.3.11 it is possible to prevent shared extensions from unloading so
that valgrind can correctly track the memory leaks in shared extensions. For
this there is the ZEND_DONT_UNLOAD_MODULES environment variable. If set, then
DL_UNLOAD() is skipped during the shutdown of shared extensions.


Tweaking:
---------

The Zend MM can be tweaked using ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE environment
variables.  Default values are "malloc" and "256K". Dependent on target system you
can also use "mmap_anon", "mmap_zero" and "win32" storage managers.

	$ ZEND_MM_MEM_TYPE=mmap_anon ZEND_MM_SEG_SIZE=1M sapi/cli/php ..etc.