PEP 445: more background
This commit is contained in:
parent
3e2f3cfdb3
commit
28d184fcff
59
pep-0445.txt
59
pep-0445.txt
|
@ -151,13 +151,65 @@ CCP API
|
||||||
XXX To be done (Kristján Valur Jónsson) XXX
|
XXX To be done (Kristján Valur Jónsson) XXX
|
||||||
|
|
||||||
|
|
||||||
|
External libraries
|
||||||
|
==================
|
||||||
|
|
||||||
|
* glib: `g_mem_set_vtable()
|
||||||
|
<http://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-mem-set-vtable>`_
|
||||||
|
|
||||||
|
|
||||||
|
Memory allocators
|
||||||
|
=================
|
||||||
|
|
||||||
|
The C standard library provides the well known ``malloc()`` function. Its
|
||||||
|
implementation depends on the platform and of the C library. The GNU C library
|
||||||
|
uses a modified ptmalloc2, based on "Doug Lea's Malloc" (dlmalloc). FreeBSD
|
||||||
|
uses `jemalloc <http://www.canonware.com/jemalloc/>`_. Google provides
|
||||||
|
tcmalloc which is part of `gperftools <http://code.google.com/p/gperftools/>`_.
|
||||||
|
|
||||||
|
``malloc()`` uses two kinds of memory: heap and memory mappings. Memory
|
||||||
|
mappings are usually used for large allocations (ex: larger than 256 KB),
|
||||||
|
whereas the heap is used for small allocations.
|
||||||
|
|
||||||
|
The heap is handled by ``brk()`` and ``sbrk()`` system calls on Linux, and is
|
||||||
|
contiguous. Memory mappings are handled by ``mmap()`` on UNIX and
|
||||||
|
``VirtualAlloc()`` on Windows, they are discontiguous. Releasing a memory
|
||||||
|
mapping gives back the memory immediatly to the system. For the heap, memory is
|
||||||
|
only gave back to the system if it is at the end of the heap. Otherwise, the
|
||||||
|
memory will only gave back to the system when all the memory located after the
|
||||||
|
released memory are also released. This limitation causes an issue called the
|
||||||
|
"memory fragmentation": the memory usage seen by the system may be much higher
|
||||||
|
than real usage.
|
||||||
|
|
||||||
|
Windows provides a `Low-fragmentation Heap
|
||||||
|
<http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750%28v=vs.85%29.aspx>`_.
|
||||||
|
|
||||||
|
The Linux kernel uses `slab allocation
|
||||||
|
<http://en.wikipedia.org/wiki/Slab_allocation>`_.
|
||||||
|
|
||||||
|
The glib library has a `Memory Slice API
|
||||||
|
<https://developer.gnome.org/glib/unstable/glib-Memory-Slices.html>`_:
|
||||||
|
efficient way to allocate groups of equal-sized chunks of memory
|
||||||
|
|
||||||
|
|
||||||
Links
|
Links
|
||||||
=====
|
=====
|
||||||
|
|
||||||
Memory allocators:
|
CPython issues related to memory allocation:
|
||||||
|
|
||||||
* `Issue #3329: Add new APIs to customize memory allocators
|
* `Issue #3329: Add new APIs to customize memory allocators
|
||||||
<http://bugs.python.org/issue3329>`_
|
<http://bugs.python.org/issue3329>`_
|
||||||
|
* `Issue #13483: Use VirtualAlloc to allocate memory arenas
|
||||||
|
<http://bugs.python.org/issue13483>`_
|
||||||
|
* `Issue #16742: PyOS_Readline drops GIL and calls PyOS_StdioReadline, which
|
||||||
|
isn't thread safe <http://bugs.python.org/issue16742>`_
|
||||||
|
* `Issue #18203: Replace calls to malloc() with PyMem_Malloc()
|
||||||
|
<http://bugs.python.org/issue18203>`_
|
||||||
|
* `Issue #18227: Use Python memory allocators in external libraries like zlib
|
||||||
|
or OpenSSL <http://bugs.python.org/issue18227>`_
|
||||||
|
|
||||||
|
Projects analyzing the memory usage of Python applications:
|
||||||
|
|
||||||
* `pytracemalloc
|
* `pytracemalloc
|
||||||
<https://pypi.python.org/pypi/pytracemalloc>`_
|
<https://pypi.python.org/pypi/pytracemalloc>`_
|
||||||
* `Meliae: Python Memory Usage Analyzer
|
* `Meliae: Python Memory Usage Analyzer
|
||||||
|
@ -167,6 +219,11 @@ Memory allocators:
|
||||||
* `PySizer (developed for Python 2.4)
|
* `PySizer (developed for Python 2.4)
|
||||||
<http://pysizer.8325.org/>`_
|
<http://pysizer.8325.org/>`_
|
||||||
|
|
||||||
|
APIs to set a custom memory allocator and/or hook memory allocators:
|
||||||
|
|
||||||
|
* `GNU libc: Memory Allocation Hooks
|
||||||
|
<http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html>`_
|
||||||
|
|
||||||
Other:
|
Other:
|
||||||
|
|
||||||
* `Python benchmark suite
|
* `Python benchmark suite
|
||||||
|
|
Loading…
Reference in New Issue