2019-05-17 09:55:34 +00:00
|
|
|
.. highlight:: c
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
.. _memory:
|
|
|
|
|
|
|
|
*****************
|
|
|
|
Memory Management
|
|
|
|
*****************
|
|
|
|
|
|
|
|
.. sectionauthor:: Vladimir Marangozov <Vladimir.Marangozov@inrialpes.fr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _memoryoverview:
|
|
|
|
|
|
|
|
Overview
|
|
|
|
========
|
|
|
|
|
|
|
|
Memory management in Python involves a private heap containing all Python
|
|
|
|
objects and data structures. The management of this private heap is ensured
|
|
|
|
internally by the *Python memory manager*. The Python memory manager has
|
|
|
|
different components which deal with various dynamic storage management aspects,
|
|
|
|
like sharing, segmentation, preallocation or caching.
|
|
|
|
|
|
|
|
At the lowest level, a raw memory allocator ensures that there is enough room in
|
|
|
|
the private heap for storing all Python-related data by interacting with the
|
|
|
|
memory manager of the operating system. On top of the raw memory allocator,
|
|
|
|
several object-specific allocators operate on the same heap and implement
|
|
|
|
distinct memory management policies adapted to the peculiarities of every object
|
|
|
|
type. For example, integer objects are managed differently within the heap than
|
|
|
|
strings, tuples or dictionaries because integers imply different storage
|
|
|
|
requirements and speed/space tradeoffs. The Python memory manager thus delegates
|
|
|
|
some of the work to the object-specific allocators, but ensures that the latter
|
|
|
|
operate within the bounds of the private heap.
|
|
|
|
|
|
|
|
It is important to understand that the management of the Python heap is
|
|
|
|
performed by the interpreter itself and that the user has no control over it,
|
2018-06-18 04:34:30 +00:00
|
|
|
even if they regularly manipulate object pointers to memory blocks inside that
|
2007-08-15 14:28:22 +00:00
|
|
|
heap. The allocation of heap space for Python objects and other internal
|
|
|
|
buffers is performed on demand by the Python memory manager through the Python/C
|
|
|
|
API functions listed in this document.
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
single: malloc()
|
|
|
|
single: calloc()
|
|
|
|
single: realloc()
|
|
|
|
single: free()
|
|
|
|
|
|
|
|
To avoid memory corruption, extension writers should never try to operate on
|
2010-10-06 10:11:56 +00:00
|
|
|
Python objects with the functions exported by the C library: :c:func:`malloc`,
|
|
|
|
:c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. This will result in mixed
|
2007-08-15 14:28:22 +00:00
|
|
|
calls between the C allocator and the Python memory manager with fatal
|
|
|
|
consequences, because they implement different algorithms and operate on
|
|
|
|
different heaps. However, one may safely allocate and release memory blocks
|
|
|
|
with the C library allocator for individual purposes, as shown in the following
|
|
|
|
example::
|
|
|
|
|
|
|
|
PyObject *res;
|
|
|
|
char *buf = (char *) malloc(BUFSIZ); /* for I/O */
|
|
|
|
|
|
|
|
if (buf == NULL)
|
|
|
|
return PyErr_NoMemory();
|
|
|
|
...Do some I/O operation involving buf...
|
2013-03-22 20:43:30 +00:00
|
|
|
res = PyBytes_FromString(buf);
|
2007-08-15 14:28:22 +00:00
|
|
|
free(buf); /* malloc'ed */
|
|
|
|
return res;
|
|
|
|
|
|
|
|
In this example, the memory request for the I/O buffer is handled by the C
|
|
|
|
library allocator. The Python memory manager is involved only in the allocation
|
2019-07-06 04:03:13 +00:00
|
|
|
of the bytes object returned as a result.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
In most situations, however, it is recommended to allocate memory from the
|
|
|
|
Python heap specifically because the latter is under control of the Python
|
|
|
|
memory manager. For example, this is required when the interpreter is extended
|
|
|
|
with new object types written in C. Another reason for using the Python heap is
|
|
|
|
the desire to *inform* the Python memory manager about the memory needs of the
|
|
|
|
extension module. Even when the requested memory is used exclusively for
|
|
|
|
internal, highly-specific purposes, delegating all memory requests to the Python
|
|
|
|
memory manager causes the interpreter to have a more accurate image of its
|
|
|
|
memory footprint as a whole. Consequently, under certain circumstances, the
|
|
|
|
Python memory manager may or may not trigger appropriate actions, like garbage
|
|
|
|
collection, memory compaction or other preventive procedures. Note that by using
|
|
|
|
the C library allocator as shown in the previous example, the allocated memory
|
|
|
|
for the I/O buffer escapes completely the Python memory manager.
|
|
|
|
|
2016-03-09 13:49:52 +00:00
|
|
|
.. seealso::
|
|
|
|
|
2016-03-14 11:04:26 +00:00
|
|
|
The :envvar:`PYTHONMALLOC` environment variable can be used to configure
|
|
|
|
the memory allocators used by Python.
|
|
|
|
|
2016-03-09 13:49:52 +00:00
|
|
|
The :envvar:`PYTHONMALLOCSTATS` environment variable can be used to print
|
2016-03-14 11:04:26 +00:00
|
|
|
statistics of the :ref:`pymalloc memory allocator <pymalloc>` every time a
|
|
|
|
new pymalloc object arena is created, and on shutdown.
|
2016-03-09 13:49:52 +00:00
|
|
|
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
Raw Memory Interface
|
|
|
|
====================
|
|
|
|
|
|
|
|
The following function sets are wrappers to the system allocator. These
|
|
|
|
functions are thread-safe, the :term:`GIL <global interpreter lock>` does not
|
|
|
|
need to be held.
|
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
The :ref:`default raw memory allocator <default-memory-allocators>` uses
|
|
|
|
the following functions: :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc`
|
|
|
|
and :c:func:`free`; call ``malloc(1)`` (or ``calloc(1, 1)``) when requesting
|
|
|
|
zero bytes.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
.. versionadded:: 3.4
|
|
|
|
|
|
|
|
.. c:function:: void* PyMem_RawMalloc(size_t n)
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
|
2019-10-30 10:03:20 +00:00
|
|
|
allocated memory, or ``NULL`` if the request fails.
|
2016-03-09 13:49:52 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
|
2016-03-09 13:49:52 +00:00
|
|
|
if ``PyMem_RawMalloc(1)`` had been called instead. The memory will not have
|
2013-07-07 00:05:46 +00:00
|
|
|
been initialized in any way.
|
|
|
|
|
|
|
|
|
2014-05-02 20:31:14 +00:00
|
|
|
.. c:function:: void* PyMem_RawCalloc(size_t nelem, size_t elsize)
|
|
|
|
|
|
|
|
Allocates *nelem* elements each whose size in bytes is *elsize* and returns
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
|
2016-03-09 13:49:52 +00:00
|
|
|
request fails. The memory is initialized to zeros.
|
|
|
|
|
|
|
|
Requesting zero elements or elements of size zero bytes returns a distinct
|
2019-10-30 10:03:20 +00:00
|
|
|
non-``NULL`` pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been
|
2016-03-09 13:49:52 +00:00
|
|
|
called instead.
|
2014-05-02 20:31:14 +00:00
|
|
|
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
|
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
.. c:function:: void* PyMem_RawRealloc(void *p, size_t n)
|
|
|
|
|
|
|
|
Resizes the memory block pointed to by *p* to *n* bytes. The contents will
|
2016-03-09 13:49:52 +00:00
|
|
|
be unchanged to the minimum of the old and the new sizes.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, the call is equivalent to ``PyMem_RawMalloc(n)``; else if
|
2016-03-09 13:49:52 +00:00
|
|
|
*n* is equal to zero, the memory block is resized but is not freed, and the
|
2019-10-30 10:03:20 +00:00
|
|
|
returned pointer is non-``NULL``.
|
2016-03-09 13:49:52 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Unless *p* is ``NULL``, it must have been returned by a previous call to
|
2016-03-09 13:49:52 +00:00
|
|
|
:c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or
|
|
|
|
:c:func:`PyMem_RawCalloc`.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If the request fails, :c:func:`PyMem_RawRealloc` returns ``NULL`` and *p*
|
2016-03-09 13:49:52 +00:00
|
|
|
remains a valid pointer to the previous memory area.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: void PyMem_RawFree(void *p)
|
|
|
|
|
|
|
|
Frees the memory block pointed to by *p*, which must have been returned by a
|
2016-03-09 13:49:52 +00:00
|
|
|
previous call to :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or
|
2017-10-31 16:37:25 +00:00
|
|
|
:c:func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_RawFree(p)`` has been
|
2016-03-09 13:49:52 +00:00
|
|
|
called before, undefined behavior occurs.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, no operation is performed.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
|
2007-08-15 14:28:22 +00:00
|
|
|
.. _memoryinterface:
|
|
|
|
|
|
|
|
Memory Interface
|
|
|
|
================
|
|
|
|
|
|
|
|
The following function sets, modeled after the ANSI C standard, but specifying
|
|
|
|
behavior when requesting zero bytes, are available for allocating and releasing
|
2013-07-07 00:05:46 +00:00
|
|
|
memory from the Python heap.
|
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
The :ref:`default memory allocator <default-memory-allocators>` uses the
|
|
|
|
:ref:`pymalloc memory allocator <pymalloc>`.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
.. warning::
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
The :term:`GIL <global interpreter lock>` must be held when using these
|
|
|
|
functions.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2016-04-22 14:26:23 +00:00
|
|
|
.. versionchanged:: 3.6
|
|
|
|
|
|
|
|
The default allocator is now pymalloc instead of system :c:func:`malloc`.
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: void* PyMem_Malloc(size_t n)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
|
2019-10-30 10:03:20 +00:00
|
|
|
allocated memory, or ``NULL`` if the request fails.
|
2016-03-09 13:49:52 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
|
2016-03-09 13:49:52 +00:00
|
|
|
if ``PyMem_Malloc(1)`` had been called instead. The memory will not have
|
|
|
|
been initialized in any way.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
|
2014-05-02 20:31:14 +00:00
|
|
|
.. c:function:: void* PyMem_Calloc(size_t nelem, size_t elsize)
|
|
|
|
|
|
|
|
Allocates *nelem* elements each whose size in bytes is *elsize* and returns
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
|
2016-03-09 13:49:52 +00:00
|
|
|
request fails. The memory is initialized to zeros.
|
|
|
|
|
|
|
|
Requesting zero elements or elements of size zero bytes returns a distinct
|
2019-10-30 10:03:20 +00:00
|
|
|
non-``NULL`` pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been called
|
2016-03-09 13:49:52 +00:00
|
|
|
instead.
|
2014-05-02 20:31:14 +00:00
|
|
|
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: void* PyMem_Realloc(void *p, size_t n)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
Resizes the memory block pointed to by *p* to *n* bytes. The contents will be
|
2016-03-09 13:49:52 +00:00
|
|
|
unchanged to the minimum of the old and the new sizes.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, the call is equivalent to ``PyMem_Malloc(n)``; else if *n*
|
2016-03-09 13:49:52 +00:00
|
|
|
is equal to zero, the memory block is resized but is not freed, and the
|
2019-10-30 10:03:20 +00:00
|
|
|
returned pointer is non-``NULL``.
|
2016-03-09 13:49:52 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Unless *p* is ``NULL``, it must have been returned by a previous call to
|
2016-03-09 13:49:52 +00:00
|
|
|
:c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If the request fails, :c:func:`PyMem_Realloc` returns ``NULL`` and *p* remains
|
2016-03-09 13:49:52 +00:00
|
|
|
a valid pointer to the previous memory area.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: void PyMem_Free(void *p)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
Frees the memory block pointed to by *p*, which must have been returned by a
|
2016-03-09 13:49:52 +00:00
|
|
|
previous call to :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or
|
|
|
|
:c:func:`PyMem_Calloc`. Otherwise, or if ``PyMem_Free(p)`` has been called
|
|
|
|
before, undefined behavior occurs.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, no operation is performed.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
The following type-oriented macros are provided for convenience. Note that
|
|
|
|
*TYPE* refers to any C type.
|
|
|
|
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: TYPE* PyMem_New(TYPE, size_t n)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes of
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
memory. Returns a pointer cast to :c:type:`TYPE*`. The memory will not have
|
2007-08-15 14:28:22 +00:00
|
|
|
been initialized in any way.
|
|
|
|
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: TYPE* PyMem_Resize(void *p, TYPE, size_t n)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n *
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE*`. On return,
|
2019-10-30 10:03:20 +00:00
|
|
|
*p* will be a pointer to the new memory area, or ``NULL`` in the event of
|
2016-03-09 13:49:52 +00:00
|
|
|
failure.
|
|
|
|
|
|
|
|
This is a C preprocessor macro; *p* is always reassigned. Save the original
|
|
|
|
value of *p* to avoid losing memory when handling errors.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
.. c:function:: void PyMem_Del(void *p)
|
2007-08-15 14:28:22 +00:00
|
|
|
|
2010-10-06 10:11:56 +00:00
|
|
|
Same as :c:func:`PyMem_Free`.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
In addition, the following macro sets are provided for calling the Python memory
|
|
|
|
allocator directly, without involving the C API functions listed above. However,
|
|
|
|
note that their use does not preserve binary compatibility across Python
|
|
|
|
versions and is therefore deprecated in extension modules.
|
|
|
|
|
2016-03-09 13:49:52 +00:00
|
|
|
* ``PyMem_MALLOC(size)``
|
|
|
|
* ``PyMem_NEW(type, size)``
|
|
|
|
* ``PyMem_REALLOC(ptr, size)``
|
|
|
|
* ``PyMem_RESIZE(ptr, type, size)``
|
|
|
|
* ``PyMem_FREE(ptr)``
|
|
|
|
* ``PyMem_DEL(ptr)``
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
|
2017-10-31 16:37:25 +00:00
|
|
|
Object allocators
|
|
|
|
=================
|
|
|
|
|
|
|
|
The following function sets, modeled after the ANSI C standard, but specifying
|
|
|
|
behavior when requesting zero bytes, are available for allocating and releasing
|
|
|
|
memory from the Python heap.
|
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
The :ref:`default object allocator <default-memory-allocators>` uses the
|
|
|
|
:ref:`pymalloc memory allocator <pymalloc>`.
|
2017-10-31 16:37:25 +00:00
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
The :term:`GIL <global interpreter lock>` must be held when using these
|
|
|
|
functions.
|
|
|
|
|
|
|
|
.. c:function:: void* PyObject_Malloc(size_t n)
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
|
2019-10-30 10:03:20 +00:00
|
|
|
allocated memory, or ``NULL`` if the request fails.
|
2017-10-31 16:37:25 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
|
2017-10-31 16:37:25 +00:00
|
|
|
if ``PyObject_Malloc(1)`` had been called instead. The memory will not have
|
|
|
|
been initialized in any way.
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: void* PyObject_Calloc(size_t nelem, size_t elsize)
|
|
|
|
|
|
|
|
Allocates *nelem* elements each whose size in bytes is *elsize* and returns
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
|
2017-10-31 16:37:25 +00:00
|
|
|
request fails. The memory is initialized to zeros.
|
|
|
|
|
|
|
|
Requesting zero elements or elements of size zero bytes returns a distinct
|
2019-10-30 10:03:20 +00:00
|
|
|
non-``NULL`` pointer if possible, as if ``PyObject_Calloc(1, 1)`` had been called
|
2017-10-31 16:37:25 +00:00
|
|
|
instead.
|
|
|
|
|
|
|
|
.. versionadded:: 3.5
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: void* PyObject_Realloc(void *p, size_t n)
|
|
|
|
|
|
|
|
Resizes the memory block pointed to by *p* to *n* bytes. The contents will be
|
|
|
|
unchanged to the minimum of the old and the new sizes.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, the call is equivalent to ``PyObject_Malloc(n)``; else if *n*
|
2017-10-31 16:37:25 +00:00
|
|
|
is equal to zero, the memory block is resized but is not freed, and the
|
2019-10-30 10:03:20 +00:00
|
|
|
returned pointer is non-``NULL``.
|
2017-10-31 16:37:25 +00:00
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
Unless *p* is ``NULL``, it must have been returned by a previous call to
|
2017-10-31 16:37:25 +00:00
|
|
|
:c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:func:`PyObject_Calloc`.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If the request fails, :c:func:`PyObject_Realloc` returns ``NULL`` and *p* remains
|
2017-10-31 16:37:25 +00:00
|
|
|
a valid pointer to the previous memory area.
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: void PyObject_Free(void *p)
|
|
|
|
|
|
|
|
Frees the memory block pointed to by *p*, which must have been returned by a
|
|
|
|
previous call to :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or
|
|
|
|
:c:func:`PyObject_Calloc`. Otherwise, or if ``PyObject_Free(p)`` has been called
|
|
|
|
before, undefined behavior occurs.
|
|
|
|
|
2019-10-30 10:03:20 +00:00
|
|
|
If *p* is ``NULL``, no operation is performed.
|
2017-10-31 16:37:25 +00:00
|
|
|
|
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
.. _default-memory-allocators:
|
|
|
|
|
|
|
|
Default Memory Allocators
|
|
|
|
=========================
|
|
|
|
|
|
|
|
Default memory allocators:
|
|
|
|
|
|
|
|
=============================== ==================== ================== ===================== ====================
|
|
|
|
Configuration Name PyMem_RawMalloc PyMem_Malloc PyObject_Malloc
|
|
|
|
=============================== ==================== ================== ===================== ====================
|
|
|
|
Release build ``"pymalloc"`` ``malloc`` ``pymalloc`` ``pymalloc``
|
|
|
|
Debug build ``"pymalloc_debug"`` ``malloc`` + debug ``pymalloc`` + debug ``pymalloc`` + debug
|
|
|
|
Release build, without pymalloc ``"malloc"`` ``malloc`` ``malloc`` ``malloc``
|
2018-11-30 07:42:47 +00:00
|
|
|
Debug build, without pymalloc ``"malloc_debug"`` ``malloc`` + debug ``malloc`` + debug ``malloc`` + debug
|
2017-11-29 16:20:38 +00:00
|
|
|
=============================== ==================== ================== ===================== ====================
|
|
|
|
|
|
|
|
Legend:
|
|
|
|
|
|
|
|
* Name: value for :envvar:`PYTHONMALLOC` environment variable
|
|
|
|
* ``malloc``: system allocators from the standard C library, C functions:
|
|
|
|
:c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`
|
|
|
|
* ``pymalloc``: :ref:`pymalloc memory allocator <pymalloc>`
|
|
|
|
* "+ debug": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks`
|
|
|
|
|
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
Customize Memory Allocators
|
|
|
|
===========================
|
|
|
|
|
|
|
|
.. versionadded:: 3.4
|
|
|
|
|
2014-06-02 19:57:10 +00:00
|
|
|
.. c:type:: PyMemAllocatorEx
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
Structure used to describe a memory block allocator. The structure has
|
2022-04-07 14:32:09 +00:00
|
|
|
the following fields:
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
|
|
|
| Field | Meaning |
|
|
|
|
+==========================================================+=======================================+
|
|
|
|
| ``void *ctx`` | user context passed as first argument |
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
|
|
|
| ``void* malloc(void *ctx, size_t size)`` | allocate a memory block |
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
2014-05-02 20:31:14 +00:00
|
|
|
| ``void* calloc(void *ctx, size_t nelem, size_t elsize)`` | allocate a memory block initialized |
|
|
|
|
| | with zeros |
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
2013-07-07 00:05:46 +00:00
|
|
|
| ``void* realloc(void *ctx, void *ptr, size_t new_size)`` | allocate or resize a memory block |
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
|
|
|
| ``void free(void *ctx, void *ptr)`` | free a memory block |
|
|
|
|
+----------------------------------------------------------+---------------------------------------+
|
|
|
|
|
2014-05-02 20:31:14 +00:00
|
|
|
.. versionchanged:: 3.5
|
2014-06-02 19:57:10 +00:00
|
|
|
The :c:type:`PyMemAllocator` structure was renamed to
|
|
|
|
:c:type:`PyMemAllocatorEx` and a new ``calloc`` field was added.
|
|
|
|
|
2014-05-02 20:31:14 +00:00
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
.. c:type:: PyMemAllocatorDomain
|
|
|
|
|
|
|
|
Enum used to identify an allocator domain. Domains:
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
.. c:macro:: PYMEM_DOMAIN_RAW
|
2016-04-22 14:26:23 +00:00
|
|
|
|
|
|
|
Functions:
|
|
|
|
|
|
|
|
* :c:func:`PyMem_RawMalloc`
|
|
|
|
* :c:func:`PyMem_RawRealloc`
|
|
|
|
* :c:func:`PyMem_RawCalloc`
|
|
|
|
* :c:func:`PyMem_RawFree`
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
.. c:macro:: PYMEM_DOMAIN_MEM
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-04-22 14:26:23 +00:00
|
|
|
Functions:
|
|
|
|
|
|
|
|
* :c:func:`PyMem_Malloc`,
|
|
|
|
* :c:func:`PyMem_Realloc`
|
|
|
|
* :c:func:`PyMem_Calloc`
|
|
|
|
* :c:func:`PyMem_Free`
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
.. c:macro:: PYMEM_DOMAIN_OBJ
|
2016-04-22 14:26:23 +00:00
|
|
|
|
|
|
|
Functions:
|
|
|
|
|
|
|
|
* :c:func:`PyObject_Malloc`
|
|
|
|
* :c:func:`PyObject_Realloc`
|
|
|
|
* :c:func:`PyObject_Calloc`
|
|
|
|
* :c:func:`PyObject_Free`
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2014-06-02 19:57:10 +00:00
|
|
|
.. c:function:: void PyMem_GetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
Get the memory block allocator of the specified domain.
|
|
|
|
|
|
|
|
|
2014-06-02 19:57:10 +00:00
|
|
|
.. c:function:: void PyMem_SetAllocator(PyMemAllocatorDomain domain, PyMemAllocatorEx *allocator)
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
Set the memory block allocator of the specified domain.
|
|
|
|
|
2019-10-30 19:37:16 +00:00
|
|
|
The new allocator must return a distinct non-``NULL`` pointer when requesting
|
2013-07-07 00:05:46 +00:00
|
|
|
zero bytes.
|
|
|
|
|
|
|
|
For the :c:data:`PYMEM_DOMAIN_RAW` domain, the allocator must be
|
|
|
|
thread-safe: the :term:`GIL <global interpreter lock>` is not held when the
|
|
|
|
allocator is called.
|
|
|
|
|
|
|
|
If the new allocator is not a hook (does not call the previous allocator),
|
|
|
|
the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the
|
|
|
|
debug hooks on top on the new allocator.
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: void PyMem_SetupDebugHooks(void)
|
|
|
|
|
2016-04-22 14:26:23 +00:00
|
|
|
Setup hooks to detect bugs in the Python memory allocator functions.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2019-04-11 11:01:15 +00:00
|
|
|
Newly allocated memory is filled with the byte ``0xCD`` (``CLEANBYTE``),
|
|
|
|
freed memory is filled with the byte ``0xDD`` (``DEADBYTE``). Memory blocks
|
|
|
|
are surrounded by "forbidden bytes" (``FORBIDDENBYTE``: byte ``0xFD``).
|
2016-04-22 14:26:23 +00:00
|
|
|
|
|
|
|
Runtime checks:
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-03-14 21:26:53 +00:00
|
|
|
- Detect API violations, ex: :c:func:`PyObject_Free` called on a buffer
|
2013-07-07 00:05:46 +00:00
|
|
|
allocated by :c:func:`PyMem_Malloc`
|
2016-03-14 21:26:53 +00:00
|
|
|
- Detect write before the start of the buffer (buffer underflow)
|
|
|
|
- Detect write after the end of the buffer (buffer overflow)
|
|
|
|
- Check that the :term:`GIL <global interpreter lock>` is held when
|
2016-03-18 10:04:31 +00:00
|
|
|
allocator functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex:
|
|
|
|
:c:func:`PyObject_Malloc`) and :c:data:`PYMEM_DOMAIN_MEM` (ex:
|
|
|
|
:c:func:`PyMem_Malloc`) domains are called
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-03-15 21:22:13 +00:00
|
|
|
On error, the debug hooks use the :mod:`tracemalloc` module to get the
|
|
|
|
traceback where a memory block was allocated. The traceback is only
|
|
|
|
displayed if :mod:`tracemalloc` is tracing Python memory allocations and the
|
|
|
|
memory block was traced.
|
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
These hooks are :ref:`installed by default <default-memory-allocators>` if
|
|
|
|
Python is compiled in debug
|
2016-03-14 11:04:26 +00:00
|
|
|
mode. The :envvar:`PYTHONMALLOC` environment variable can be used to install
|
|
|
|
debug hooks on a Python compiled in release mode.
|
|
|
|
|
|
|
|
.. versionchanged:: 3.6
|
|
|
|
This function now also works on Python compiled in release mode.
|
2016-03-15 21:22:13 +00:00
|
|
|
On error, the debug hooks now use :mod:`tracemalloc` to get the traceback
|
2016-03-18 10:04:31 +00:00
|
|
|
where a memory block was allocated. The debug hooks now also check
|
2016-03-18 14:10:43 +00:00
|
|
|
if the GIL is held when functions of :c:data:`PYMEM_DOMAIN_OBJ` and
|
2016-03-18 10:04:31 +00:00
|
|
|
:c:data:`PYMEM_DOMAIN_MEM` domains are called.
|
2016-03-14 11:04:26 +00:00
|
|
|
|
2019-07-28 11:40:47 +00:00
|
|
|
.. versionchanged:: 3.8
|
2019-04-11 11:01:15 +00:00
|
|
|
Byte patterns ``0xCB`` (``CLEANBYTE``), ``0xDB`` (``DEADBYTE``) and
|
|
|
|
``0xFB`` (``FORBIDDENBYTE``) have been replaced with ``0xCD``, ``0xDD``
|
|
|
|
and ``0xFD`` to use the same values than Windows CRT debug ``malloc()``
|
|
|
|
and ``free()``.
|
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-03-14 11:04:26 +00:00
|
|
|
.. _pymalloc:
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-03-14 11:04:26 +00:00
|
|
|
The pymalloc allocator
|
|
|
|
======================
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2016-03-14 11:04:26 +00:00
|
|
|
Python has a *pymalloc* allocator optimized for small objects (smaller or equal
|
|
|
|
to 512 bytes) with a short lifetime. It uses memory mappings called "arenas"
|
2017-11-08 22:44:44 +00:00
|
|
|
with a fixed size of 256 KiB. It falls back to :c:func:`PyMem_RawMalloc` and
|
2016-03-14 11:04:26 +00:00
|
|
|
:c:func:`PyMem_RawRealloc` for allocations larger than 512 bytes.
|
2013-07-07 00:05:46 +00:00
|
|
|
|
2017-11-29 16:20:38 +00:00
|
|
|
*pymalloc* is the :ref:`default allocator <default-memory-allocators>` of the
|
|
|
|
:c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) and
|
|
|
|
:c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) domains.
|
2016-03-14 11:04:26 +00:00
|
|
|
|
|
|
|
The arena allocator uses the following functions:
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
* :c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows,
|
|
|
|
* :c:func:`mmap` and :c:func:`munmap` if available,
|
|
|
|
* :c:func:`malloc` and :c:func:`free` otherwise.
|
|
|
|
|
2016-03-14 11:04:26 +00:00
|
|
|
Customize pymalloc Arena Allocator
|
|
|
|
----------------------------------
|
|
|
|
|
2013-07-07 00:05:46 +00:00
|
|
|
.. versionadded:: 3.4
|
|
|
|
|
|
|
|
.. c:type:: PyObjectArenaAllocator
|
|
|
|
|
|
|
|
Structure used to describe an arena allocator. The structure has
|
|
|
|
three fields:
|
|
|
|
|
|
|
|
+--------------------------------------------------+---------------------------------------+
|
|
|
|
| Field | Meaning |
|
|
|
|
+==================================================+=======================================+
|
|
|
|
| ``void *ctx`` | user context passed as first argument |
|
|
|
|
+--------------------------------------------------+---------------------------------------+
|
|
|
|
| ``void* alloc(void *ctx, size_t size)`` | allocate an arena of size bytes |
|
|
|
|
+--------------------------------------------------+---------------------------------------+
|
2021-03-09 11:39:39 +00:00
|
|
|
| ``void free(void *ctx, void *ptr, size_t size)`` | free an arena |
|
2013-07-07 00:05:46 +00:00
|
|
|
+--------------------------------------------------+---------------------------------------+
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
.. c:function:: void PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
Get the arena allocator.
|
|
|
|
|
[3.9] bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844) (GH-21901)
* bpo-40204: Allow pre-Sphinx 3 syntax in the doc (GH-21844)
Enable Sphinx 3.2 "c_allow_pre_v3" option and disable the
c_warn_on_allowed_pre_v3 option to make the documentation compatible
with Sphinx 2 and Sphinx 3.
(cherry picked from commit 423e77d6de497931585d1883805a9e3fa4096b0b)
* bpo-40204: Fix Sphinx sytanx in howto/instrumentation.rst (GH-21858)
Use generic '.. object::' to declare markers, rather than abusing
'.. c:function::' which fails on Sphinx 3.
(cherry picked from commit 43577c01a2ab49122db696e9eaec6cb31d11cc81)
* bpo-40204: Fix duplicates in the documentation (GH-21857)
Fix two Sphinx 3 issues:
Doc/c-api/buffer.rst:304: WARNING: Duplicate C declaration, also defined in 'c-api/buffer'.
Declaration is 'PyBUF_ND'.
Doc/c-api/unicode.rst:1603: WARNING: Duplicate C declaration, also defined in 'c-api/unicode'.
Declaration is 'PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)'.
(cherry picked from commit 46d10b1237c67ff8347f533eda6a5468d098f7eb)
* bpo-40204: Add :noindex: in the documentation (GH-21859)
Add :noindex: to duplicated documentation to fix "duplicate object
description" errors.
For example, fix this Sphinx 3 issue:
Doc/library/configparser.rst:1146: WARNING: duplicate object
description of configparser.ConfigParser.optionxform, other instance
in library/configparser, use :noindex: for one of them
(cherry picked from commit d3ded080482beae578faa704b13534a62d066f9f)
* bpo-40204, doc: Fix syntax of C variables (GH-21846)
For example, fix the following Sphinx 3 errors:
Doc/c-api/buffer.rst:102: WARNING: Error in declarator or parameters
Invalid C declaration: Expected identifier in nested name. [error at 5]
void \*obj
-----^
Doc/c-api/arg.rst:130: WARNING: Unparseable C cross-reference: 'PyObject*'
Invalid C declaration: Expected end of definition. [error at 8]
PyObject*
--------^
The modified documentation is compatible with Sphinx 2 and Sphinx 3.
(cherry picked from commit 474652fe9346382dbf793f20b671eb74668bebde)
* bpo-40204: Fix reference to terms in the doc (GH-21865)
Sphinx 3 requires to refer to terms with the exact case.
For example, fix the Sphinx 3 warning:
Doc/library/pkgutil.rst:71: WARNING: term Loader not found in case
sensitive match.made a reference to loader instead.
(cherry picked from commit bb0b08540cc93e56f3f1bde1b39ce086d9e35fe1)
* bpo-40204: Fix duplicated productionlist names in the doc (GH-21900)
Sphinx 3 disallows having more than one productionlist markup with
the same name. Simply remove names in this case, since names are not
shown anyway. For example, fix the Sphinx 3 warning:
Doc/reference/introduction.rst:96: duplicate token description
of *:name, other instance in reference/expressions
(cherry picked from commit 1abeda80f760134b4233608e2c288790f955b95a)
2020-08-19 17:25:22 +00:00
|
|
|
.. c:function:: void PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)
|
2013-07-07 00:05:46 +00:00
|
|
|
|
|
|
|
Set the arena allocator.
|
|
|
|
|
|
|
|
|
2017-06-20 15:46:36 +00:00
|
|
|
tracemalloc C API
|
|
|
|
=================
|
|
|
|
|
|
|
|
.. versionadded:: 3.7
|
|
|
|
|
2020-02-21 10:47:41 +00:00
|
|
|
.. c:function:: int PyTraceMalloc_Track(unsigned int domain, uintptr_t ptr, size_t size)
|
2017-06-20 15:46:36 +00:00
|
|
|
|
|
|
|
Track an allocated memory block in the :mod:`tracemalloc` module.
|
|
|
|
|
2018-02-09 11:31:19 +00:00
|
|
|
Return ``0`` on success, return ``-1`` on error (failed to allocate memory to
|
2017-06-20 15:46:36 +00:00
|
|
|
store the trace). Return ``-2`` if tracemalloc is disabled.
|
|
|
|
|
|
|
|
If memory block is already tracked, update the existing trace.
|
|
|
|
|
2020-02-21 10:47:41 +00:00
|
|
|
.. c:function:: int PyTraceMalloc_Untrack(unsigned int domain, uintptr_t ptr)
|
2017-06-20 15:46:36 +00:00
|
|
|
|
|
|
|
Untrack an allocated memory block in the :mod:`tracemalloc` module.
|
|
|
|
Do nothing if the block was not tracked.
|
|
|
|
|
|
|
|
Return ``-2`` if tracemalloc is disabled, otherwise return ``0``.
|
|
|
|
|
|
|
|
|
2007-08-15 14:28:22 +00:00
|
|
|
.. _memoryexamples:
|
|
|
|
|
|
|
|
Examples
|
|
|
|
========
|
|
|
|
|
|
|
|
Here is the example from section :ref:`memoryoverview`, rewritten so that the
|
|
|
|
I/O buffer is allocated from the Python heap by using the first function set::
|
|
|
|
|
|
|
|
PyObject *res;
|
|
|
|
char *buf = (char *) PyMem_Malloc(BUFSIZ); /* for I/O */
|
|
|
|
|
|
|
|
if (buf == NULL)
|
|
|
|
return PyErr_NoMemory();
|
|
|
|
/* ...Do some I/O operation involving buf... */
|
2013-03-22 20:43:30 +00:00
|
|
|
res = PyBytes_FromString(buf);
|
2007-08-15 14:28:22 +00:00
|
|
|
PyMem_Free(buf); /* allocated with PyMem_Malloc */
|
|
|
|
return res;
|
|
|
|
|
|
|
|
The same code using the type-oriented function set::
|
|
|
|
|
|
|
|
PyObject *res;
|
|
|
|
char *buf = PyMem_New(char, BUFSIZ); /* for I/O */
|
|
|
|
|
|
|
|
if (buf == NULL)
|
|
|
|
return PyErr_NoMemory();
|
|
|
|
/* ...Do some I/O operation involving buf... */
|
2013-03-22 20:43:30 +00:00
|
|
|
res = PyBytes_FromString(buf);
|
2007-08-15 14:28:22 +00:00
|
|
|
PyMem_Del(buf); /* allocated with PyMem_New */
|
|
|
|
return res;
|
|
|
|
|
|
|
|
Note that in the two examples above, the buffer is always manipulated via
|
|
|
|
functions belonging to the same set. Indeed, it is required to use the same
|
|
|
|
memory API family for a given memory block, so that the risk of mixing different
|
|
|
|
allocators is reduced to a minimum. The following code sequence contains two
|
|
|
|
errors, one of which is labeled as *fatal* because it mixes two different
|
|
|
|
allocators operating on different heaps. ::
|
|
|
|
|
|
|
|
char *buf1 = PyMem_New(char, BUFSIZ);
|
|
|
|
char *buf2 = (char *) malloc(BUFSIZ);
|
|
|
|
char *buf3 = (char *) PyMem_Malloc(BUFSIZ);
|
|
|
|
...
|
|
|
|
PyMem_Del(buf3); /* Wrong -- should be PyMem_Free() */
|
|
|
|
free(buf2); /* Right -- allocated via malloc() */
|
|
|
|
free(buf1); /* Fatal -- should be PyMem_Del() */
|
|
|
|
|
|
|
|
In addition to the functions aimed at handling raw memory blocks from the Python
|
2010-10-06 10:11:56 +00:00
|
|
|
heap, objects in Python are allocated and released with :c:func:`PyObject_New`,
|
|
|
|
:c:func:`PyObject_NewVar` and :c:func:`PyObject_Del`.
|
2007-08-15 14:28:22 +00:00
|
|
|
|
|
|
|
These will be explained in the next chapter on defining and implementing new
|
|
|
|
object types in C.
|
|
|
|
|