blob: 290ef09dcecc6431e5e63ee369f406554ab04935 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. highlightlang:: c
2
3
4.. _memory:
5
6*****************
7Memory Management
8*****************
9
10.. sectionauthor:: Vladimir Marangozov <Vladimir.Marangozov@inrialpes.fr>
11
12
13
14.. _memoryoverview:
15
16Overview
17========
18
19Memory management in Python involves a private heap containing all Python
20objects and data structures. The management of this private heap is ensured
21internally by the *Python memory manager*. The Python memory manager has
22different components which deal with various dynamic storage management aspects,
23like sharing, segmentation, preallocation or caching.
24
25At the lowest level, a raw memory allocator ensures that there is enough room in
26the private heap for storing all Python-related data by interacting with the
27memory manager of the operating system. On top of the raw memory allocator,
28several object-specific allocators operate on the same heap and implement
29distinct memory management policies adapted to the peculiarities of every object
30type. For example, integer objects are managed differently within the heap than
31strings, tuples or dictionaries because integers imply different storage
32requirements and speed/space tradeoffs. The Python memory manager thus delegates
33some of the work to the object-specific allocators, but ensures that the latter
34operate within the bounds of the private heap.
35
36It is important to understand that the management of the Python heap is
37performed by the interpreter itself and that the user has no control over it,
38even if she regularly manipulates object pointers to memory blocks inside that
39heap. The allocation of heap space for Python objects and other internal
40buffers is performed on demand by the Python memory manager through the Python/C
41API functions listed in this document.
42
43.. index::
44 single: malloc()
45 single: calloc()
46 single: realloc()
47 single: free()
48
49To avoid memory corruption, extension writers should never try to operate on
Georg Brandl60203b42010-10-06 10:11:56 +000050Python objects with the functions exported by the C library: :c:func:`malloc`,
51:c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. This will result in mixed
Georg Brandl116aa622007-08-15 14:28:22 +000052calls between the C allocator and the Python memory manager with fatal
53consequences, because they implement different algorithms and operate on
54different heaps. However, one may safely allocate and release memory blocks
55with the C library allocator for individual purposes, as shown in the following
56example::
57
58 PyObject *res;
59 char *buf = (char *) malloc(BUFSIZ); /* for I/O */
60
61 if (buf == NULL)
62 return PyErr_NoMemory();
63 ...Do some I/O operation involving buf...
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070064 res = PyBytes_FromString(buf);
Georg Brandl116aa622007-08-15 14:28:22 +000065 free(buf); /* malloc'ed */
66 return res;
67
68In this example, the memory request for the I/O buffer is handled by the C
69library allocator. The Python memory manager is involved only in the allocation
70of the string object returned as a result.
71
72In most situations, however, it is recommended to allocate memory from the
73Python heap specifically because the latter is under control of the Python
74memory manager. For example, this is required when the interpreter is extended
75with new object types written in C. Another reason for using the Python heap is
76the desire to *inform* the Python memory manager about the memory needs of the
77extension module. Even when the requested memory is used exclusively for
78internal, highly-specific purposes, delegating all memory requests to the Python
79memory manager causes the interpreter to have a more accurate image of its
80memory footprint as a whole. Consequently, under certain circumstances, the
81Python memory manager may or may not trigger appropriate actions, like garbage
82collection, memory compaction or other preventive procedures. Note that by using
83the C library allocator as shown in the previous example, the allocated memory
84for the I/O buffer escapes completely the Python memory manager.
85
Victor Stinner29bf27f2016-03-09 14:49:52 +010086.. seealso::
87
88 The :envvar:`PYTHONMALLOCSTATS` environment variable can be used to print
89 memory allocation statistics every time a new object arena is created, and
90 on shutdown.
91
Georg Brandl116aa622007-08-15 14:28:22 +000092
Victor Stinner0507bf52013-07-07 02:05:46 +020093Raw Memory Interface
94====================
95
96The following function sets are wrappers to the system allocator. These
97functions are thread-safe, the :term:`GIL <global interpreter lock>` does not
98need to be held.
99
100The default raw memory block allocator uses the following functions:
Victor Stinnerdb067af2014-05-02 22:31:14 +0200101:c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`; call
102``malloc(1)`` (or ``calloc(1, 1)``) when requesting zero bytes.
Victor Stinner0507bf52013-07-07 02:05:46 +0200103
104.. versionadded:: 3.4
105
106.. c:function:: void* PyMem_RawMalloc(size_t n)
107
108 Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
Victor Stinner29bf27f2016-03-09 14:49:52 +0100109 allocated memory, or *NULL* if the request fails.
110
111 Requesting zero bytes returns a distinct non-*NULL* pointer if possible, as
112 if ``PyMem_RawMalloc(1)`` had been called instead. The memory will not have
Victor Stinner0507bf52013-07-07 02:05:46 +0200113 been initialized in any way.
114
115
Victor Stinnerdb067af2014-05-02 22:31:14 +0200116.. c:function:: void* PyMem_RawCalloc(size_t nelem, size_t elsize)
117
118 Allocates *nelem* elements each whose size in bytes is *elsize* and returns
119 a pointer of type :c:type:`void\*` to the allocated memory, or *NULL* if the
Victor Stinner29bf27f2016-03-09 14:49:52 +0100120 request fails. The memory is initialized to zeros.
121
122 Requesting zero elements or elements of size zero bytes returns a distinct
123 non-*NULL* pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been
124 called instead.
Victor Stinnerdb067af2014-05-02 22:31:14 +0200125
126 .. versionadded:: 3.5
127
128
Victor Stinner0507bf52013-07-07 02:05:46 +0200129.. c:function:: void* PyMem_RawRealloc(void *p, size_t n)
130
131 Resizes the memory block pointed to by *p* to *n* bytes. The contents will
Victor Stinner29bf27f2016-03-09 14:49:52 +0100132 be unchanged to the minimum of the old and the new sizes.
133
134 If *p* is *NULL*, the call is equivalent to ``PyMem_RawMalloc(n)``; else if
135 *n* is equal to zero, the memory block is resized but is not freed, and the
136 returned pointer is non-*NULL*.
137
138 Unless *p* is *NULL*, it must have been returned by a previous call to
139 :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or
140 :c:func:`PyMem_RawCalloc`.
141
142 If the request fails, :c:func:`PyMem_RawRealloc` returns *NULL* and *p*
143 remains a valid pointer to the previous memory area.
Victor Stinner0507bf52013-07-07 02:05:46 +0200144
145
146.. c:function:: void PyMem_RawFree(void *p)
147
148 Frees the memory block pointed to by *p*, which must have been returned by a
Victor Stinner29bf27f2016-03-09 14:49:52 +0100149 previous call to :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or
150 :c:func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_Free(p)`` has been
151 called before, undefined behavior occurs.
152
153 If *p* is *NULL*, no operation is performed.
Victor Stinner0507bf52013-07-07 02:05:46 +0200154
155
Georg Brandl116aa622007-08-15 14:28:22 +0000156.. _memoryinterface:
157
158Memory Interface
159================
160
161The following function sets, modeled after the ANSI C standard, but specifying
162behavior when requesting zero bytes, are available for allocating and releasing
Victor Stinner0507bf52013-07-07 02:05:46 +0200163memory from the Python heap.
Georg Brandl116aa622007-08-15 14:28:22 +0000164
Victor Stinner0507bf52013-07-07 02:05:46 +0200165The default memory block allocator uses the following functions:
Victor Stinnerdb067af2014-05-02 22:31:14 +0200166:c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`; call
167``malloc(1)`` (or ``calloc(1, 1)``) when requesting zero bytes.
Victor Stinner0507bf52013-07-07 02:05:46 +0200168
169.. warning::
170
171 The :term:`GIL <global interpreter lock>` must be held when using these
172 functions.
Georg Brandl116aa622007-08-15 14:28:22 +0000173
Georg Brandl60203b42010-10-06 10:11:56 +0000174.. c:function:: void* PyMem_Malloc(size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Georg Brandl60203b42010-10-06 10:11:56 +0000176 Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
Victor Stinner29bf27f2016-03-09 14:49:52 +0100177 allocated memory, or *NULL* if the request fails.
178
179 Requesting zero bytes returns a distinct non-*NULL* pointer if possible, as
180 if ``PyMem_Malloc(1)`` had been called instead. The memory will not have
181 been initialized in any way.
Georg Brandl116aa622007-08-15 14:28:22 +0000182
183
Victor Stinnerdb067af2014-05-02 22:31:14 +0200184.. c:function:: void* PyMem_Calloc(size_t nelem, size_t elsize)
185
186 Allocates *nelem* elements each whose size in bytes is *elsize* and returns
187 a pointer of type :c:type:`void\*` to the allocated memory, or *NULL* if the
Victor Stinner29bf27f2016-03-09 14:49:52 +0100188 request fails. The memory is initialized to zeros.
189
190 Requesting zero elements or elements of size zero bytes returns a distinct
191 non-*NULL* pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been called
192 instead.
Victor Stinnerdb067af2014-05-02 22:31:14 +0200193
194 .. versionadded:: 3.5
195
196
Georg Brandl60203b42010-10-06 10:11:56 +0000197.. c:function:: void* PyMem_Realloc(void *p, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000198
199 Resizes the memory block pointed to by *p* to *n* bytes. The contents will be
Victor Stinner29bf27f2016-03-09 14:49:52 +0100200 unchanged to the minimum of the old and the new sizes.
201
202 If *p* is *NULL*, the call is equivalent to ``PyMem_Malloc(n)``; else if *n*
203 is equal to zero, the memory block is resized but is not freed, and the
204 returned pointer is non-*NULL*.
205
206 Unless *p* is *NULL*, it must have been returned by a previous call to
207 :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`.
208
209 If the request fails, :c:func:`PyMem_Realloc` returns *NULL* and *p* remains
210 a valid pointer to the previous memory area.
Georg Brandl116aa622007-08-15 14:28:22 +0000211
212
Georg Brandl60203b42010-10-06 10:11:56 +0000213.. c:function:: void PyMem_Free(void *p)
Georg Brandl116aa622007-08-15 14:28:22 +0000214
215 Frees the memory block pointed to by *p*, which must have been returned by a
Victor Stinner29bf27f2016-03-09 14:49:52 +0100216 previous call to :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or
217 :c:func:`PyMem_Calloc`. Otherwise, or if ``PyMem_Free(p)`` has been called
218 before, undefined behavior occurs.
219
220 If *p* is *NULL*, no operation is performed.
Georg Brandl116aa622007-08-15 14:28:22 +0000221
222The following type-oriented macros are provided for convenience. Note that
223*TYPE* refers to any C type.
224
225
Georg Brandl60203b42010-10-06 10:11:56 +0000226.. c:function:: TYPE* PyMem_New(TYPE, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000227
Georg Brandl60203b42010-10-06 10:11:56 +0000228 Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes of
229 memory. Returns a pointer cast to :c:type:`TYPE\*`. The memory will not have
Georg Brandl116aa622007-08-15 14:28:22 +0000230 been initialized in any way.
231
232
Georg Brandl60203b42010-10-06 10:11:56 +0000233.. c:function:: TYPE* PyMem_Resize(void *p, TYPE, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000234
Georg Brandl60203b42010-10-06 10:11:56 +0000235 Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n *
236 sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE\*`. On return,
Georg Brandld492ad82008-07-23 16:13:07 +0000237 *p* will be a pointer to the new memory area, or *NULL* in the event of
Victor Stinner29bf27f2016-03-09 14:49:52 +0100238 failure.
239
240 This is a C preprocessor macro; *p* is always reassigned. Save the original
241 value of *p* to avoid losing memory when handling errors.
Georg Brandl116aa622007-08-15 14:28:22 +0000242
243
Georg Brandl60203b42010-10-06 10:11:56 +0000244.. c:function:: void PyMem_Del(void *p)
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Georg Brandl60203b42010-10-06 10:11:56 +0000246 Same as :c:func:`PyMem_Free`.
Georg Brandl116aa622007-08-15 14:28:22 +0000247
248In addition, the following macro sets are provided for calling the Python memory
249allocator directly, without involving the C API functions listed above. However,
250note that their use does not preserve binary compatibility across Python
251versions and is therefore deprecated in extension modules.
252
Victor Stinner29bf27f2016-03-09 14:49:52 +0100253* ``PyMem_MALLOC(size)``
254* ``PyMem_NEW(type, size)``
255* ``PyMem_REALLOC(ptr, size)``
256* ``PyMem_RESIZE(ptr, type, size)``
257* ``PyMem_FREE(ptr)``
258* ``PyMem_DEL(ptr)``
Georg Brandl116aa622007-08-15 14:28:22 +0000259
260
Victor Stinner0507bf52013-07-07 02:05:46 +0200261Customize Memory Allocators
262===========================
263
264.. versionadded:: 3.4
265
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200266.. c:type:: PyMemAllocatorEx
Victor Stinner0507bf52013-07-07 02:05:46 +0200267
268 Structure used to describe a memory block allocator. The structure has
269 four fields:
270
271 +----------------------------------------------------------+---------------------------------------+
272 | Field | Meaning |
273 +==========================================================+=======================================+
274 | ``void *ctx`` | user context passed as first argument |
275 +----------------------------------------------------------+---------------------------------------+
276 | ``void* malloc(void *ctx, size_t size)`` | allocate a memory block |
277 +----------------------------------------------------------+---------------------------------------+
Victor Stinnerdb067af2014-05-02 22:31:14 +0200278 | ``void* calloc(void *ctx, size_t nelem, size_t elsize)`` | allocate a memory block initialized |
279 | | with zeros |
280 +----------------------------------------------------------+---------------------------------------+
Victor Stinner0507bf52013-07-07 02:05:46 +0200281 | ``void* realloc(void *ctx, void *ptr, size_t new_size)`` | allocate or resize a memory block |
282 +----------------------------------------------------------+---------------------------------------+
283 | ``void free(void *ctx, void *ptr)`` | free a memory block |
284 +----------------------------------------------------------+---------------------------------------+
285
Victor Stinnerdb067af2014-05-02 22:31:14 +0200286 .. versionchanged:: 3.5
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200287 The :c:type:`PyMemAllocator` structure was renamed to
288 :c:type:`PyMemAllocatorEx` and a new ``calloc`` field was added.
289
Victor Stinnerdb067af2014-05-02 22:31:14 +0200290
Victor Stinner0507bf52013-07-07 02:05:46 +0200291.. c:type:: PyMemAllocatorDomain
292
293 Enum used to identify an allocator domain. Domains:
294
295 * :c:data:`PYMEM_DOMAIN_RAW`: functions :c:func:`PyMem_RawMalloc`,
Victor Stinner29bf27f2016-03-09 14:49:52 +0100296 :c:func:`PyMem_RawRealloc`, :c:func:`PyMem_RawCalloc` and
297 :c:func:`PyMem_RawFree`
Victor Stinner0507bf52013-07-07 02:05:46 +0200298 * :c:data:`PYMEM_DOMAIN_MEM`: functions :c:func:`PyMem_Malloc`,
Victor Stinner29bf27f2016-03-09 14:49:52 +0100299 :c:func:`PyMem_Realloc`, :c:func:`PyMem_Calloc` and :c:func:`PyMem_Free`
Victor Stinner0507bf52013-07-07 02:05:46 +0200300 * :c:data:`PYMEM_DOMAIN_OBJ`: functions :c:func:`PyObject_Malloc`,
Victor Stinner29bf27f2016-03-09 14:49:52 +0100301 :c:func:`PyObject_Realloc`, :c:func:`PyObject_Calloc` and
302 :c:func:`PyObject_Free`
Victor Stinner0507bf52013-07-07 02:05:46 +0200303
304
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200305.. c:function:: void PyMem_GetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
Victor Stinner0507bf52013-07-07 02:05:46 +0200306
307 Get the memory block allocator of the specified domain.
308
309
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200310.. c:function:: void PyMem_SetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
Victor Stinner0507bf52013-07-07 02:05:46 +0200311
312 Set the memory block allocator of the specified domain.
313
314 The new allocator must return a distinct non-NULL pointer when requesting
315 zero bytes.
316
317 For the :c:data:`PYMEM_DOMAIN_RAW` domain, the allocator must be
318 thread-safe: the :term:`GIL <global interpreter lock>` is not held when the
319 allocator is called.
320
321 If the new allocator is not a hook (does not call the previous allocator),
322 the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the
323 debug hooks on top on the new allocator.
324
325
326.. c:function:: void PyMem_SetupDebugHooks(void)
327
328 Setup hooks to detect bugs in the following Python memory allocator
329 functions:
330
331 - :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc`,
Victor Stinner29bf27f2016-03-09 14:49:52 +0100332 :c:func:`PyMem_RawCalloc`, :c:func:`PyMem_RawFree`
333 - :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc`, :c:func:`PyMem_Calloc`,
334 :c:func:`PyMem_Free`
Victor Stinner0507bf52013-07-07 02:05:46 +0200335 - :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc`,
Victor Stinner29bf27f2016-03-09 14:49:52 +0100336 :c:func:`PyObject_Calloc`, :c:func:`PyObject_Free`
Victor Stinner0507bf52013-07-07 02:05:46 +0200337
338 Newly allocated memory is filled with the byte ``0xCB``, freed memory is
R David Murray5be7f152015-04-14 16:42:08 -0400339 filled with the byte ``0xDB``. Additional checks:
Victor Stinner0507bf52013-07-07 02:05:46 +0200340
341 - detect API violations, ex: :c:func:`PyObject_Free` called on a buffer
342 allocated by :c:func:`PyMem_Malloc`
343 - detect write before the start of the buffer (buffer underflow)
344 - detect write after the end of the buffer (buffer overflow)
345
346 The function does nothing if Python is not compiled is debug mode.
347
348
349Customize PyObject Arena Allocator
350==================================
351
352Python has a *pymalloc* allocator for allocations smaller than 512 bytes. This
353allocator is optimized for small objects with a short lifetime. It uses memory
354mappings called "arenas" with a fixed size of 256 KB. It falls back to
Victor Stinner6cf185d2013-10-10 15:58:42 +0200355:c:func:`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger
356than 512 bytes. *pymalloc* is the default allocator used by
Victor Stinner0507bf52013-07-07 02:05:46 +0200357:c:func:`PyObject_Malloc`.
358
359The default arena allocator uses the following functions:
360
361* :c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows,
362* :c:func:`mmap` and :c:func:`munmap` if available,
363* :c:func:`malloc` and :c:func:`free` otherwise.
364
365.. versionadded:: 3.4
366
367.. c:type:: PyObjectArenaAllocator
368
369 Structure used to describe an arena allocator. The structure has
370 three fields:
371
372 +--------------------------------------------------+---------------------------------------+
373 | Field | Meaning |
374 +==================================================+=======================================+
375 | ``void *ctx`` | user context passed as first argument |
376 +--------------------------------------------------+---------------------------------------+
377 | ``void* alloc(void *ctx, size_t size)`` | allocate an arena of size bytes |
378 +--------------------------------------------------+---------------------------------------+
379 | ``void free(void *ctx, size_t size, void *ptr)`` | free an arena |
380 +--------------------------------------------------+---------------------------------------+
381
382.. c:function:: PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)
383
384 Get the arena allocator.
385
386.. c:function:: PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)
387
388 Set the arena allocator.
389
390
Georg Brandl116aa622007-08-15 14:28:22 +0000391.. _memoryexamples:
392
393Examples
394========
395
396Here is the example from section :ref:`memoryoverview`, rewritten so that the
397I/O buffer is allocated from the Python heap by using the first function set::
398
399 PyObject *res;
400 char *buf = (char *) PyMem_Malloc(BUFSIZ); /* for I/O */
401
402 if (buf == NULL)
403 return PyErr_NoMemory();
404 /* ...Do some I/O operation involving buf... */
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700405 res = PyBytes_FromString(buf);
Georg Brandl116aa622007-08-15 14:28:22 +0000406 PyMem_Free(buf); /* allocated with PyMem_Malloc */
407 return res;
408
409The same code using the type-oriented function set::
410
411 PyObject *res;
412 char *buf = PyMem_New(char, BUFSIZ); /* for I/O */
413
414 if (buf == NULL)
415 return PyErr_NoMemory();
416 /* ...Do some I/O operation involving buf... */
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700417 res = PyBytes_FromString(buf);
Georg Brandl116aa622007-08-15 14:28:22 +0000418 PyMem_Del(buf); /* allocated with PyMem_New */
419 return res;
420
421Note that in the two examples above, the buffer is always manipulated via
422functions belonging to the same set. Indeed, it is required to use the same
423memory API family for a given memory block, so that the risk of mixing different
424allocators is reduced to a minimum. The following code sequence contains two
425errors, one of which is labeled as *fatal* because it mixes two different
426allocators operating on different heaps. ::
427
428 char *buf1 = PyMem_New(char, BUFSIZ);
429 char *buf2 = (char *) malloc(BUFSIZ);
430 char *buf3 = (char *) PyMem_Malloc(BUFSIZ);
431 ...
432 PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */
433 free(buf2); /* Right -- allocated via malloc() */
434 free(buf1); /* Fatal -- should be PyMem_Del() */
435
436In addition to the functions aimed at handling raw memory blocks from the Python
Georg Brandl60203b42010-10-06 10:11:56 +0000437heap, objects in Python are allocated and released with :c:func:`PyObject_New`,
438:c:func:`PyObject_NewVar` and :c:func:`PyObject_Del`.
Georg Brandl116aa622007-08-15 14:28:22 +0000439
440These will be explained in the next chapter on defining and implementing new
441object types in C.
442