blob: 5d78f385ee098c01c2ed0902230ec5ceee3dd407 [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
86
Victor Stinner0507bf52013-07-07 02:05:46 +020087Raw Memory Interface
88====================
89
90The following function sets are wrappers to the system allocator. These
91functions are thread-safe, the :term:`GIL <global interpreter lock>` does not
92need to be held.
93
94The default raw memory block allocator uses the following functions:
Victor Stinnerdb067af2014-05-02 22:31:14 +020095:c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`; call
96``malloc(1)`` (or ``calloc(1, 1)``) when requesting zero bytes.
Victor Stinner0507bf52013-07-07 02:05:46 +020097
98.. versionadded:: 3.4
99
100.. c:function:: void* PyMem_RawMalloc(size_t n)
101
102 Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
103 allocated memory, or *NULL* if the request fails. Requesting zero bytes
104 returns a distinct non-*NULL* pointer if possible, as if
105 ``PyMem_RawMalloc(1)`` had been called instead. The memory will not have
106 been initialized in any way.
107
108
Victor Stinnerdb067af2014-05-02 22:31:14 +0200109.. c:function:: void* PyMem_RawCalloc(size_t nelem, size_t elsize)
110
111 Allocates *nelem* elements each whose size in bytes is *elsize* and returns
112 a pointer of type :c:type:`void\*` to the allocated memory, or *NULL* if the
113 request fails. The memory is initialized to zeros. Requesting zero elements
114 or elements of size zero bytes returns a distinct non-*NULL* pointer if
115 possible, as if ``PyMem_RawCalloc(1, 1)`` had been called instead.
116
117 .. versionadded:: 3.5
118
119
Victor Stinner0507bf52013-07-07 02:05:46 +0200120.. c:function:: void* PyMem_RawRealloc(void *p, size_t n)
121
122 Resizes the memory block pointed to by *p* to *n* bytes. The contents will
123 be unchanged to the minimum of the old and the new sizes. If *p* is *NULL*,
124 the call is equivalent to ``PyMem_RawMalloc(n)``; else if *n* is equal to
125 zero, the memory block is resized but is not freed, and the returned pointer
126 is non-*NULL*. Unless *p* is *NULL*, it must have been returned by a
127 previous call to :c:func:`PyMem_RawMalloc` or :c:func:`PyMem_RawRealloc`. If
128 the request fails, :c:func:`PyMem_RawRealloc` returns *NULL* and *p* remains
129 a valid pointer to the previous memory area.
130
131
132.. c:function:: void PyMem_RawFree(void *p)
133
134 Frees the memory block pointed to by *p*, which must have been returned by a
135 previous call to :c:func:`PyMem_RawMalloc` or :c:func:`PyMem_RawRealloc`.
136 Otherwise, or if ``PyMem_Free(p)`` has been called before, undefined
137 behavior occurs. If *p* is *NULL*, no operation is performed.
138
139
Georg Brandl116aa622007-08-15 14:28:22 +0000140.. _memoryinterface:
141
142Memory Interface
143================
144
145The following function sets, modeled after the ANSI C standard, but specifying
146behavior when requesting zero bytes, are available for allocating and releasing
Victor Stinner0507bf52013-07-07 02:05:46 +0200147memory from the Python heap.
Georg Brandl116aa622007-08-15 14:28:22 +0000148
Victor Stinner0507bf52013-07-07 02:05:46 +0200149The default memory block allocator uses the following functions:
Victor Stinnerdb067af2014-05-02 22:31:14 +0200150:c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`; call
151``malloc(1)`` (or ``calloc(1, 1)``) when requesting zero bytes.
Victor Stinner0507bf52013-07-07 02:05:46 +0200152
153.. warning::
154
155 The :term:`GIL <global interpreter lock>` must be held when using these
156 functions.
Georg Brandl116aa622007-08-15 14:28:22 +0000157
Georg Brandl60203b42010-10-06 10:11:56 +0000158.. c:function:: void* PyMem_Malloc(size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000159
Georg Brandl60203b42010-10-06 10:11:56 +0000160 Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
Georg Brandl116aa622007-08-15 14:28:22 +0000161 allocated memory, or *NULL* if the request fails. Requesting zero bytes returns
Andrew Svetlov7dbee382012-08-09 21:26:34 +0300162 a distinct non-*NULL* pointer if possible, as if ``PyMem_Malloc(1)`` had
Georg Brandl116aa622007-08-15 14:28:22 +0000163 been called instead. The memory will not have been initialized in any way.
164
165
Victor Stinnerdb067af2014-05-02 22:31:14 +0200166.. c:function:: void* PyMem_Calloc(size_t nelem, size_t elsize)
167
168 Allocates *nelem* elements each whose size in bytes is *elsize* and returns
169 a pointer of type :c:type:`void\*` to the allocated memory, or *NULL* if the
170 request fails. The memory is initialized to zeros. Requesting zero elements
171 or elements of size zero bytes returns a distinct non-*NULL* pointer if
172 possible, as if ``PyMem_Calloc(1, 1)`` had been called instead.
173
174 .. versionadded:: 3.5
175
176
Georg Brandl60203b42010-10-06 10:11:56 +0000177.. c:function:: void* PyMem_Realloc(void *p, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000178
179 Resizes the memory block pointed to by *p* to *n* bytes. The contents will be
180 unchanged to the minimum of the old and the new sizes. If *p* is *NULL*, the
Andrew Svetlov7dbee382012-08-09 21:26:34 +0300181 call is equivalent to ``PyMem_Malloc(n)``; else if *n* is equal to zero,
Georg Brandl116aa622007-08-15 14:28:22 +0000182 the memory block is resized but is not freed, and the returned pointer is
183 non-*NULL*. Unless *p* is *NULL*, it must have been returned by a previous call
Georg Brandl60203b42010-10-06 10:11:56 +0000184 to :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`. If the request fails,
185 :c:func:`PyMem_Realloc` returns *NULL* and *p* remains a valid pointer to the
Georg Brandl116aa622007-08-15 14:28:22 +0000186 previous memory area.
187
188
Georg Brandl60203b42010-10-06 10:11:56 +0000189.. c:function:: void PyMem_Free(void *p)
Georg Brandl116aa622007-08-15 14:28:22 +0000190
191 Frees the memory block pointed to by *p*, which must have been returned by a
Georg Brandl60203b42010-10-06 10:11:56 +0000192 previous call to :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`. Otherwise, or
Andrew Svetlov7dbee382012-08-09 21:26:34 +0300193 if ``PyMem_Free(p)`` has been called before, undefined behavior occurs. If
Georg Brandl116aa622007-08-15 14:28:22 +0000194 *p* is *NULL*, no operation is performed.
195
196The following type-oriented macros are provided for convenience. Note that
197*TYPE* refers to any C type.
198
199
Georg Brandl60203b42010-10-06 10:11:56 +0000200.. c:function:: TYPE* PyMem_New(TYPE, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000201
Georg Brandl60203b42010-10-06 10:11:56 +0000202 Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes of
203 memory. Returns a pointer cast to :c:type:`TYPE\*`. The memory will not have
Georg Brandl116aa622007-08-15 14:28:22 +0000204 been initialized in any way.
205
206
Georg Brandl60203b42010-10-06 10:11:56 +0000207.. c:function:: TYPE* PyMem_Resize(void *p, TYPE, size_t n)
Georg Brandl116aa622007-08-15 14:28:22 +0000208
Georg Brandl60203b42010-10-06 10:11:56 +0000209 Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n *
210 sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE\*`. On return,
Georg Brandld492ad82008-07-23 16:13:07 +0000211 *p* will be a pointer to the new memory area, or *NULL* in the event of
212 failure. This is a C preprocessor macro; p is always reassigned. Save
213 the original value of p to avoid losing memory when handling errors.
Georg Brandl116aa622007-08-15 14:28:22 +0000214
215
Georg Brandl60203b42010-10-06 10:11:56 +0000216.. c:function:: void PyMem_Del(void *p)
Georg Brandl116aa622007-08-15 14:28:22 +0000217
Georg Brandl60203b42010-10-06 10:11:56 +0000218 Same as :c:func:`PyMem_Free`.
Georg Brandl116aa622007-08-15 14:28:22 +0000219
220In addition, the following macro sets are provided for calling the Python memory
221allocator directly, without involving the C API functions listed above. However,
222note that their use does not preserve binary compatibility across Python
223versions and is therefore deprecated in extension modules.
224
Georg Brandl60203b42010-10-06 10:11:56 +0000225:c:func:`PyMem_MALLOC`, :c:func:`PyMem_REALLOC`, :c:func:`PyMem_FREE`.
Georg Brandl116aa622007-08-15 14:28:22 +0000226
Georg Brandl60203b42010-10-06 10:11:56 +0000227:c:func:`PyMem_NEW`, :c:func:`PyMem_RESIZE`, :c:func:`PyMem_DEL`.
Georg Brandl116aa622007-08-15 14:28:22 +0000228
229
Victor Stinner0507bf52013-07-07 02:05:46 +0200230Customize Memory Allocators
231===========================
232
233.. versionadded:: 3.4
234
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200235.. c:type:: PyMemAllocatorEx
Victor Stinner0507bf52013-07-07 02:05:46 +0200236
237 Structure used to describe a memory block allocator. The structure has
238 four fields:
239
240 +----------------------------------------------------------+---------------------------------------+
241 | Field | Meaning |
242 +==========================================================+=======================================+
243 | ``void *ctx`` | user context passed as first argument |
244 +----------------------------------------------------------+---------------------------------------+
245 | ``void* malloc(void *ctx, size_t size)`` | allocate a memory block |
246 +----------------------------------------------------------+---------------------------------------+
Victor Stinnerdb067af2014-05-02 22:31:14 +0200247 | ``void* calloc(void *ctx, size_t nelem, size_t elsize)`` | allocate a memory block initialized |
248 | | with zeros |
249 +----------------------------------------------------------+---------------------------------------+
Victor Stinner0507bf52013-07-07 02:05:46 +0200250 | ``void* realloc(void *ctx, void *ptr, size_t new_size)`` | allocate or resize a memory block |
251 +----------------------------------------------------------+---------------------------------------+
252 | ``void free(void *ctx, void *ptr)`` | free a memory block |
253 +----------------------------------------------------------+---------------------------------------+
254
Victor Stinnerdb067af2014-05-02 22:31:14 +0200255 .. versionchanged:: 3.5
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200256 The :c:type:`PyMemAllocator` structure was renamed to
257 :c:type:`PyMemAllocatorEx` and a new ``calloc`` field was added.
258
Victor Stinnerdb067af2014-05-02 22:31:14 +0200259
Victor Stinner0507bf52013-07-07 02:05:46 +0200260.. c:type:: PyMemAllocatorDomain
261
262 Enum used to identify an allocator domain. Domains:
263
264 * :c:data:`PYMEM_DOMAIN_RAW`: functions :c:func:`PyMem_RawMalloc`,
265 :c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree`
266 * :c:data:`PYMEM_DOMAIN_MEM`: functions :c:func:`PyMem_Malloc`,
267 :c:func:`PyMem_Realloc` and :c:func:`PyMem_Free`
268 * :c:data:`PYMEM_DOMAIN_OBJ`: functions :c:func:`PyObject_Malloc`,
269 :c:func:`PyObject_Realloc` and :c:func:`PyObject_Free`
270
271
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200272.. c:function:: void PyMem_GetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
Victor Stinner0507bf52013-07-07 02:05:46 +0200273
274 Get the memory block allocator of the specified domain.
275
276
Victor Stinnerd8f0d922014-06-02 21:57:10 +0200277.. c:function:: void PyMem_SetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
Victor Stinner0507bf52013-07-07 02:05:46 +0200278
279 Set the memory block allocator of the specified domain.
280
281 The new allocator must return a distinct non-NULL pointer when requesting
282 zero bytes.
283
284 For the :c:data:`PYMEM_DOMAIN_RAW` domain, the allocator must be
285 thread-safe: the :term:`GIL <global interpreter lock>` is not held when the
286 allocator is called.
287
288 If the new allocator is not a hook (does not call the previous allocator),
289 the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the
290 debug hooks on top on the new allocator.
291
292
293.. c:function:: void PyMem_SetupDebugHooks(void)
294
295 Setup hooks to detect bugs in the following Python memory allocator
296 functions:
297
298 - :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc`,
299 :c:func:`PyMem_RawFree`
300 - :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc`, :c:func:`PyMem_Free`
301 - :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc`,
302 :c:func:`PyObject_Free`
303
304 Newly allocated memory is filled with the byte ``0xCB``, freed memory is
305 filled with the byte ``0xDB``. Additionnal checks:
306
307 - detect API violations, ex: :c:func:`PyObject_Free` called on a buffer
308 allocated by :c:func:`PyMem_Malloc`
309 - detect write before the start of the buffer (buffer underflow)
310 - detect write after the end of the buffer (buffer overflow)
311
312 The function does nothing if Python is not compiled is debug mode.
313
314
315Customize PyObject Arena Allocator
316==================================
317
318Python has a *pymalloc* allocator for allocations smaller than 512 bytes. This
319allocator is optimized for small objects with a short lifetime. It uses memory
320mappings called "arenas" with a fixed size of 256 KB. It falls back to
Victor Stinner6cf185d2013-10-10 15:58:42 +0200321:c:func:`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger
322than 512 bytes. *pymalloc* is the default allocator used by
Victor Stinner0507bf52013-07-07 02:05:46 +0200323:c:func:`PyObject_Malloc`.
324
325The default arena allocator uses the following functions:
326
327* :c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows,
328* :c:func:`mmap` and :c:func:`munmap` if available,
329* :c:func:`malloc` and :c:func:`free` otherwise.
330
331.. versionadded:: 3.4
332
333.. c:type:: PyObjectArenaAllocator
334
335 Structure used to describe an arena allocator. The structure has
336 three fields:
337
338 +--------------------------------------------------+---------------------------------------+
339 | Field | Meaning |
340 +==================================================+=======================================+
341 | ``void *ctx`` | user context passed as first argument |
342 +--------------------------------------------------+---------------------------------------+
343 | ``void* alloc(void *ctx, size_t size)`` | allocate an arena of size bytes |
344 +--------------------------------------------------+---------------------------------------+
345 | ``void free(void *ctx, size_t size, void *ptr)`` | free an arena |
346 +--------------------------------------------------+---------------------------------------+
347
348.. c:function:: PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)
349
350 Get the arena allocator.
351
352.. c:function:: PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)
353
354 Set the arena allocator.
355
356
Georg Brandl116aa622007-08-15 14:28:22 +0000357.. _memoryexamples:
358
359Examples
360========
361
362Here is the example from section :ref:`memoryoverview`, rewritten so that the
363I/O buffer is allocated from the Python heap by using the first function set::
364
365 PyObject *res;
366 char *buf = (char *) PyMem_Malloc(BUFSIZ); /* for I/O */
367
368 if (buf == NULL)
369 return PyErr_NoMemory();
370 /* ...Do some I/O operation involving buf... */
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700371 res = PyBytes_FromString(buf);
Georg Brandl116aa622007-08-15 14:28:22 +0000372 PyMem_Free(buf); /* allocated with PyMem_Malloc */
373 return res;
374
375The same code using the type-oriented function set::
376
377 PyObject *res;
378 char *buf = PyMem_New(char, BUFSIZ); /* for I/O */
379
380 if (buf == NULL)
381 return PyErr_NoMemory();
382 /* ...Do some I/O operation involving buf... */
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700383 res = PyBytes_FromString(buf);
Georg Brandl116aa622007-08-15 14:28:22 +0000384 PyMem_Del(buf); /* allocated with PyMem_New */
385 return res;
386
387Note that in the two examples above, the buffer is always manipulated via
388functions belonging to the same set. Indeed, it is required to use the same
389memory API family for a given memory block, so that the risk of mixing different
390allocators is reduced to a minimum. The following code sequence contains two
391errors, one of which is labeled as *fatal* because it mixes two different
392allocators operating on different heaps. ::
393
394 char *buf1 = PyMem_New(char, BUFSIZ);
395 char *buf2 = (char *) malloc(BUFSIZ);
396 char *buf3 = (char *) PyMem_Malloc(BUFSIZ);
397 ...
398 PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */
399 free(buf2); /* Right -- allocated via malloc() */
400 free(buf1); /* Fatal -- should be PyMem_Del() */
401
402In addition to the functions aimed at handling raw memory blocks from the Python
Georg Brandl60203b42010-10-06 10:11:56 +0000403heap, objects in Python are allocated and released with :c:func:`PyObject_New`,
404:c:func:`PyObject_NewVar` and :c:func:`PyObject_Del`.
Georg Brandl116aa622007-08-15 14:28:22 +0000405
406These will be explained in the next chapter on defining and implementing new
407object types in C.
408