2018-07-04 09:06:45 +00:00
|
|
|
# Copyright (C) 2001-2018, Python Software Foundation
|
2018-07-04 09:08:42 +00:00
|
|
|
# For licence information, see README file.
|
2016-10-30 09:46:26 +00:00
|
|
|
#
|
|
|
|
msgid ""
|
|
|
|
msgstr ""
|
2019-12-05 22:15:54 +00:00
|
|
|
"Project-Id-Version: Python 3\n"
|
2016-10-30 09:46:26 +00:00
|
|
|
"Report-Msgid-Bugs-To: \n"
|
2021-09-24 08:20:01 +00:00
|
|
|
"POT-Creation-Date: 2021-09-23 16:16+0200\n"
|
2016-10-30 09:46:26 +00:00
|
|
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
|
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
2018-07-04 09:14:25 +00:00
|
|
|
"Language-Team: FRENCH <traductions@lists.afpy.org>\n"
|
2017-05-23 22:40:56 +00:00
|
|
|
"Language: fr\n"
|
2016-10-30 09:46:26 +00:00
|
|
|
"MIME-Version: 1.0\n"
|
|
|
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
|
|
"Content-Transfer-Encoding: 8bit\n"
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:8
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Memory Management"
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:17
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Overview"
|
2018-11-30 17:31:12 +00:00
|
|
|
msgstr "Aperçu"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:19
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:25
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:36
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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 "
|
2018-06-28 13:32:56 +00:00
|
|
|
"it, even if they regularly manipulate object pointers to memory blocks "
|
2016-10-30 09:46:26 +00:00
|
|
|
"inside that 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."
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:49
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"To avoid memory corruption, extension writers should never try to operate on "
|
|
|
|
"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 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::"
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:68
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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 "
|
2019-09-04 09:35:23 +00:00
|
|
|
"allocation of the bytes object returned as a result."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:72
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:88
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The :envvar:`PYTHONMALLOC` environment variable can be used to configure the "
|
|
|
|
"memory allocators used by Python."
|
|
|
|
msgstr ""
|
|
|
|
|
2020-07-20 08:45:25 +00:00
|
|
|
#: c-api/memory.rst:91
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The :envvar:`PYTHONMALLOCSTATS` environment variable can be used to print "
|
|
|
|
"statistics of the :ref:`pymalloc memory allocator <pymalloc>` every time a "
|
|
|
|
"new pymalloc object arena is created, and on shutdown."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:96
|
|
|
|
msgid "Allocator Domains"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:98
|
|
|
|
msgid ""
|
|
|
|
"All allocating functions belong to one of three different \"domains\" (see "
|
|
|
|
"also :c:type:`PyMemAllocatorDomain`). These domains represent different "
|
|
|
|
"allocation strategies and are optimized for different purposes. The specific "
|
|
|
|
"details on how every domain allocates memory or what internal functions each "
|
|
|
|
"domain calls is considered an implementation detail, but for debugging "
|
|
|
|
"purposes a simplified table can be found at :ref:`here <default-memory-"
|
|
|
|
"allocators>`. There is no hard requirement to use the memory returned by the "
|
|
|
|
"allocation functions belonging to a given domain for only the purposes "
|
|
|
|
"hinted by that domain (although this is the recommended practice). For "
|
|
|
|
"example, one could use the memory returned by :c:func:`PyMem_RawMalloc` for "
|
|
|
|
"allocating Python objects or the memory returned by :c:func:"
|
|
|
|
"`PyObject_Malloc` for allocating memory for buffers."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:110
|
|
|
|
msgid "The three allocation domains are:"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:112
|
|
|
|
msgid ""
|
|
|
|
"Raw domain: intended for allocating memory for general-purpose memory "
|
|
|
|
"buffers where the allocation *must* go to the system allocator or where the "
|
|
|
|
"allocator can operate without the :term:`GIL`. The memory is requested "
|
|
|
|
"directly to the system."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:117
|
|
|
|
msgid ""
|
|
|
|
"\"Mem\" domain: intended for allocating memory for Python buffers and "
|
|
|
|
"general-purpose memory buffers where the allocation must be performed with "
|
|
|
|
"the :term:`GIL` held. The memory is taken from the Python private heap."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:121
|
|
|
|
msgid ""
|
|
|
|
"Object domain: intended for allocating memory belonging to Python objects. "
|
|
|
|
"The memory is taken from the Python private heap."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:124
|
|
|
|
msgid ""
|
|
|
|
"When freeing memory previously allocated by the allocating functions "
|
|
|
|
"belonging to a given domain,the matching specific deallocating functions "
|
|
|
|
"must be used. For example, :c:func:`PyMem_Free` must be used to free memory "
|
|
|
|
"allocated using :c:func:`PyMem_Malloc`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:129
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Raw Memory Interface"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:131
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:135
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2018-06-28 13:32:56 +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."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:215 c-api/memory.rst:323
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2020-09-11 07:11:46 +00:00
|
|
|
"Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the "
|
2019-11-15 22:57:16 +00:00
|
|
|
"allocated memory, or ``NULL`` if the request fails."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:147
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, "
|
|
|
|
"as if ``PyMem_RawMalloc(1)`` had been called instead. The memory will not "
|
|
|
|
"have been initialized in any way."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:225 c-api/memory.rst:333
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Allocates *nelem* elements each whose size in bytes is *elsize* and returns "
|
2020-09-11 07:11:46 +00:00
|
|
|
"a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if "
|
2016-10-30 09:46:26 +00:00
|
|
|
"the request fails. The memory is initialized to zeros."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:158
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Requesting zero elements or elements of size zero bytes returns a distinct "
|
2019-11-15 22:57:16 +00:00
|
|
|
"non-``NULL`` pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been "
|
2016-10-30 09:46:26 +00:00
|
|
|
"called instead."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:238 c-api/memory.rst:346
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:170
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If *p* is ``NULL``, the call is equivalent to ``PyMem_RawMalloc(n)``; else "
|
|
|
|
"if *n* is equal to zero, the memory block is resized but is not freed, and "
|
|
|
|
"the returned pointer is non-``NULL``."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:174
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
|
2016-10-30 09:46:26 +00:00
|
|
|
"func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or :c:func:"
|
|
|
|
"`PyMem_RawCalloc`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:178
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If the request fails, :c:func:`PyMem_RawRealloc` returns ``NULL`` and *p* "
|
2016-10-30 09:46:26 +00:00
|
|
|
"remains a valid pointer to the previous memory area."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:184
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Frees the memory block pointed to by *p*, which must have been returned by a "
|
|
|
|
"previous call to :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or :c:"
|
2017-12-01 06:48:13 +00:00
|
|
|
"func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_RawFree(p)`` has been "
|
|
|
|
"called before, undefined behavior occurs."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:259 c-api/memory.rst:367
|
2019-11-15 22:57:16 +00:00
|
|
|
msgid "If *p* is ``NULL``, no operation is performed."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:195
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Memory Interface"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:303
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:201
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2018-06-28 13:32:56 +00:00
|
|
|
"The :ref:`default memory allocator <default-memory-allocators>` uses the :"
|
|
|
|
"ref:`pymalloc memory allocator <pymalloc>`."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:318
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The :term:`GIL <global interpreter lock>` must be held when using these "
|
|
|
|
"functions."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:211
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The default allocator is now pymalloc instead of system :c:func:`malloc`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:218
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, "
|
|
|
|
"as if ``PyMem_Malloc(1)`` had been called instead. The memory will not have "
|
2016-10-30 09:46:26 +00:00
|
|
|
"been initialized in any way."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:229
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Requesting zero elements or elements of size zero bytes returns a distinct "
|
2019-11-15 22:57:16 +00:00
|
|
|
"non-``NULL`` pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been "
|
|
|
|
"called instead."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:241
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If *p* is ``NULL``, the call is equivalent to ``PyMem_Malloc(n)``; else if "
|
|
|
|
"*n* is equal to zero, the memory block is resized but is not freed, and the "
|
|
|
|
"returned pointer is non-``NULL``."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:245
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
|
2016-10-30 09:46:26 +00:00
|
|
|
"func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:248
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If the request fails, :c:func:`PyMem_Realloc` returns ``NULL`` and *p* "
|
|
|
|
"remains a valid pointer to the previous memory area."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:254
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Frees the memory block pointed to by *p*, which must have been returned by a "
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:261
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The following type-oriented macros are provided for convenience. Note that "
|
|
|
|
"*TYPE* refers to any C type."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:267
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes "
|
2020-09-11 07:11:46 +00:00
|
|
|
"of memory. Returns a pointer cast to :c:type:`TYPE*`. The memory will not "
|
|
|
|
"have been initialized in any way."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:274
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n * "
|
2020-09-11 07:11:46 +00:00
|
|
|
"sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE*`. On "
|
2019-11-15 22:57:16 +00:00
|
|
|
"return, *p* will be a pointer to the new memory area, or ``NULL`` in the "
|
|
|
|
"event of failure."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:279
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"This is a C preprocessor macro; *p* is always reassigned. Save the original "
|
|
|
|
"value of *p* to avoid losing memory when handling errors."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:285
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Same as :c:func:`PyMem_Free`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:287
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:292
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_MALLOC(size)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:293
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_NEW(type, size)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:294
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_REALLOC(ptr, size)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:295
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_RESIZE(ptr, type, size)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:296
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_FREE(ptr)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:297
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``PyMem_DEL(ptr)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:301
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid "Object allocators"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:308
|
|
|
|
msgid ""
|
|
|
|
"There is no guarantee that the memory returned by these allocators can be "
|
|
|
|
"successfully casted to a Python object when intercepting the allocating "
|
|
|
|
"functions in this domain by the methods described in the :ref:`Customize "
|
|
|
|
"Memory Allocators <customize-memory-allocators>` section."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:313
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid ""
|
|
|
|
"The :ref:`default object allocator <default-memory-allocators>` uses the :"
|
|
|
|
"ref:`pymalloc memory allocator <pymalloc>`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:326
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, "
|
|
|
|
"as if ``PyObject_Malloc(1)`` had been called instead. The memory will not "
|
|
|
|
"have been initialized in any way."
|
2017-12-01 06:48:13 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:337
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
|
|
|
"Requesting zero elements or elements of size zero bytes returns a distinct "
|
2019-11-15 22:57:16 +00:00
|
|
|
"non-``NULL`` pointer if possible, as if ``PyObject_Calloc(1, 1)`` had been "
|
2017-12-01 06:48:13 +00:00
|
|
|
"called instead."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:349
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If *p* is ``NULL``, the call is equivalent to ``PyObject_Malloc(n)``; else "
|
|
|
|
"if *n* is equal to zero, the memory block is resized but is not freed, and "
|
|
|
|
"the returned pointer is non-``NULL``."
|
2017-12-01 06:48:13 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:353
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
|
2017-12-01 06:48:13 +00:00
|
|
|
"func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:func:"
|
|
|
|
"`PyObject_Calloc`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:356
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"If the request fails, :c:func:`PyObject_Realloc` returns ``NULL`` and *p* "
|
2017-12-01 06:48:13 +00:00
|
|
|
"remains a valid pointer to the previous memory area."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:362
|
2017-12-01 06:48:13 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:373
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Default Memory Allocators"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:375
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Default memory allocators:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:378
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Configuration"
|
2018-11-30 17:31:12 +00:00
|
|
|
msgstr "Configuration"
|
2018-06-28 13:32:56 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:378
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Name"
|
2018-07-03 09:14:42 +00:00
|
|
|
msgstr "Nom"
|
2018-06-28 13:32:56 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:378
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "PyMem_RawMalloc"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:378
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "PyMem_Malloc"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:378
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "PyObject_Malloc"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:380
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Release build"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:380
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``\"pymalloc\"``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:382
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``malloc``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:380
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``pymalloc``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:381
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Debug build"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:381
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``\"pymalloc_debug\"``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:383
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``malloc`` + debug"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:381
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``pymalloc`` + debug"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:382
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Release build, without pymalloc"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:382
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``\"malloc\"``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:383
|
2018-12-24 13:20:55 +00:00
|
|
|
msgid "Debug build, without pymalloc"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:383
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "``\"malloc_debug\"``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:386
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "Legend:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:388
|
|
|
|
msgid "Name: value for :envvar:`PYTHONMALLOC` environment variable."
|
2018-06-28 13:32:56 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:389
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid ""
|
|
|
|
"``malloc``: system allocators from the standard C library, C functions: :c:"
|
2021-09-24 08:20:01 +00:00
|
|
|
"func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`."
|
2018-06-28 13:32:56 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:391
|
|
|
|
msgid "``pymalloc``: :ref:`pymalloc memory allocator <pymalloc>`."
|
2018-06-28 13:32:56 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:392
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"\"+ debug\": with :ref:`debug hooks on the Python memory allocators <pymem-"
|
|
|
|
"debug-hooks>`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:394
|
|
|
|
msgid "\"Debug build\": :ref:`Python build in debug mode <debug-build>`."
|
2018-06-28 13:32:56 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:399
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Customize Memory Allocators"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:405
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Structure used to describe a memory block allocator. The structure has four "
|
|
|
|
"fields:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:626
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Field"
|
2020-06-08 14:31:39 +00:00
|
|
|
msgstr "Champ"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:626
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Meaning"
|
|
|
|
msgstr "Signification"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:628
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void *ctx``"
|
|
|
|
msgstr "``void *ctx``"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:628
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "user context passed as first argument"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:413
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void* malloc(void *ctx, size_t size)``"
|
|
|
|
msgstr "``void* malloc(void *ctx, size_t size)``"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:413
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "allocate a memory block"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:415
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void* calloc(void *ctx, size_t nelem, size_t elsize)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:415
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "allocate a memory block initialized with zeros"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:418
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void* realloc(void *ctx, void *ptr, size_t new_size)``"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:418
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "allocate or resize a memory block"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:420
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void free(void *ctx, void *ptr)``"
|
|
|
|
msgstr "``void free(void *ctx, void *ptr)``"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:420
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "free a memory block"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:423
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"The :c:type:`PyMemAllocator` structure was renamed to :c:type:"
|
|
|
|
"`PyMemAllocatorEx` and a new ``calloc`` field was added."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:430
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Enum used to identify an allocator domain. Domains:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:443 c-api/memory.rst:452
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Functions:"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr "Fonctions"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:436
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_RawMalloc`"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_RawCalloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:437
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_RawRealloc`"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_RawCalloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:438
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_RawCalloc`"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_RawCalloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:439
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_RawFree`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:445
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_Malloc`,"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_Calloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:446
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_Realloc`"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_Calloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:447
|
2020-02-14 10:18:53 +00:00
|
|
|
#, fuzzy
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_Calloc`"
|
2020-02-14 10:18:53 +00:00
|
|
|
msgstr ":c:func:`PyMem_Calloc`,"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:448
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyMem_Free`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:454
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyObject_Malloc`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:455
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyObject_Realloc`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:456
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyObject_Calloc`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:457
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`PyObject_Free`"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:461
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Get the memory block allocator of the specified domain."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:466
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Set the memory block allocator of the specified domain."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:468
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2019-11-15 22:57:16 +00:00
|
|
|
"The new allocator must return a distinct non-``NULL`` pointer when "
|
|
|
|
"requesting zero bytes."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:471
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:475
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:482
|
|
|
|
msgid ""
|
|
|
|
"Setup :ref:`debug hooks in the Python memory allocators <pymem-debug-hooks>` "
|
|
|
|
"to detect memory errors."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:489
|
|
|
|
msgid "Debug hooks on the Python memory allocators"
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:491
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"When :ref:`Python is built in debug mode <debug-build>`, the :c:func:"
|
|
|
|
"`PyMem_SetupDebugHooks` function is called at the :ref:`Python "
|
|
|
|
"preinitialization <c-preinit>` to setup debug hooks on Python memory "
|
|
|
|
"allocators to detect memory errors."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:496
|
|
|
|
msgid ""
|
|
|
|
"The :envvar:`PYTHONMALLOC` environment variable can be used to install debug "
|
|
|
|
"hooks on a Python compiled in release mode (ex: ``PYTHONMALLOC=debug``)."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:499
|
|
|
|
msgid ""
|
|
|
|
"The :c:func:`PyMem_SetupDebugHooks` function can be used to set debug hooks "
|
|
|
|
"after calling :c:func:`PyMem_SetAllocator`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:502
|
|
|
|
msgid ""
|
|
|
|
"These debug hooks fill dynamically allocated memory blocks with special, "
|
|
|
|
"recognizable bit patterns. Newly allocated memory is filled with the byte "
|
|
|
|
"``0xCD`` (``PYMEM_CLEANBYTE``), freed memory is filled with the byte "
|
|
|
|
"``0xDD`` (``PYMEM_DEADBYTE``). Memory blocks are surrounded by \"forbidden "
|
|
|
|
"bytes\" filled with the byte ``0xFD`` (``PYMEM_FORBIDDENBYTE``). Strings of "
|
|
|
|
"these bytes are unlikely to be valid addresses, floats, or ASCII strings."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:509
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Runtime checks:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:511
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"Detect API violations. For example, detect if :c:func:`PyObject_Free` is "
|
|
|
|
"called on a memory block allocated by :c:func:`PyMem_Malloc`."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:513
|
|
|
|
msgid "Detect write before the start of the buffer (buffer underflow)."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:514
|
|
|
|
msgid "Detect write after the end of the buffer (buffer overflow)."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:515
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Check that the :term:`GIL <global interpreter lock>` is held when allocator "
|
|
|
|
"functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and :"
|
2021-09-24 08:20:01 +00:00
|
|
|
"c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:520
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:525
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"Let *S* = ``sizeof(size_t)``. ``2*S`` bytes are added at each end of each "
|
|
|
|
"block of *N* bytes requested. The memory layout is like so, where p "
|
|
|
|
"represents the address returned by a malloc-like or realloc-like function "
|
|
|
|
"(``p[i:j]`` means the slice of bytes from ``*(p+i)`` inclusive up to ``*(p"
|
|
|
|
"+j)`` exclusive; note that the treatment of negative indices differs from a "
|
|
|
|
"Python slice):"
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:532
|
|
|
|
msgid "``p[-2*S:-S]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:532
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"Number of bytes originally asked for. This is a size_t, big-endian (easier "
|
|
|
|
"to read in a memory dump)."
|
2016-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:539
|
|
|
|
msgid "``p[-S]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:535
|
|
|
|
msgid "API identifier (ASCII character):"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:537
|
|
|
|
msgid "``'r'`` for :c:data:`PYMEM_DOMAIN_RAW`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:538
|
|
|
|
msgid "``'m'`` for :c:data:`PYMEM_DOMAIN_MEM`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:539
|
|
|
|
msgid "``'o'`` for :c:data:`PYMEM_DOMAIN_OBJ`."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:542
|
|
|
|
msgid "``p[-S+1:0]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:542
|
|
|
|
msgid "Copies of PYMEM_FORBIDDENBYTE. Used to catch under- writes and reads."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:551
|
|
|
|
msgid "``p[0:N]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:545
|
|
|
|
msgid ""
|
|
|
|
"The requested memory, filled with copies of PYMEM_CLEANBYTE, used to catch "
|
|
|
|
"reference to uninitialized memory. When a realloc-like function is called "
|
|
|
|
"requesting a larger memory block, the new excess bytes are also filled with "
|
|
|
|
"PYMEM_CLEANBYTE. When a free-like function is called, these are overwritten "
|
|
|
|
"with PYMEM_DEADBYTE, to catch reference to freed memory. When a realloc- "
|
|
|
|
"like function is called requesting a smaller memory block, the excess old "
|
|
|
|
"bytes are also filled with PYMEM_DEADBYTE."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:554
|
|
|
|
msgid "``p[N:N+S]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:554
|
|
|
|
msgid "Copies of PYMEM_FORBIDDENBYTE. Used to catch over- writes and reads."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:565
|
|
|
|
msgid "``p[N+S:N+2*S]``"
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:557
|
|
|
|
msgid ""
|
|
|
|
"Only used if the ``PYMEM_DEBUG_SERIALNO`` macro is defined (not defined by "
|
|
|
|
"default)."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:560
|
|
|
|
msgid ""
|
|
|
|
"A serial number, incremented by 1 on each call to a malloc-like or realloc-"
|
|
|
|
"like function. Big-endian ``size_t``. If \"bad memory\" is detected later, "
|
|
|
|
"the serial number gives an excellent way to set a breakpoint on the next "
|
|
|
|
"run, to capture the instant at which this block was passed out. The static "
|
|
|
|
"function bumpserialno() in obmalloc.c is the only place the serial number is "
|
|
|
|
"incremented, and exists so you can set such a breakpoint easily."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:567
|
|
|
|
msgid ""
|
|
|
|
"A realloc-like or free-like function first checks that the "
|
|
|
|
"PYMEM_FORBIDDENBYTE bytes at each end are intact. If they've been altered, "
|
|
|
|
"diagnostic output is written to stderr, and the program is aborted via "
|
|
|
|
"Py_FatalError(). The other main failure mode is provoking a memory error "
|
|
|
|
"when a program reads up one of the special bit patterns and tries to use it "
|
|
|
|
"as an address. If you get in a debugger then and look at the object, you're "
|
|
|
|
"likely to see that it's entirely filled with PYMEM_DEADBYTE (meaning freed "
|
|
|
|
"memory is getting used) or PYMEM_CLEANBYTE (meaning uninitialized memory is "
|
|
|
|
"getting used)."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:576
|
|
|
|
msgid ""
|
|
|
|
"The :c:func:`PyMem_SetupDebugHooks` function now also works on Python "
|
|
|
|
"compiled in release mode. On error, the debug hooks now use :mod:"
|
|
|
|
"`tracemalloc` to get the traceback where a memory block was allocated. The "
|
|
|
|
"debug hooks now also check if the GIL is held when functions of :c:data:"
|
|
|
|
"`PYMEM_DOMAIN_OBJ` and :c:data:`PYMEM_DOMAIN_MEM` domains are called."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:584
|
2019-05-23 16:59:19 +00:00
|
|
|
msgid ""
|
2021-09-24 08:20:01 +00:00
|
|
|
"Byte patterns ``0xCB`` (``PYMEM_CLEANBYTE``), ``0xDB`` (``PYMEM_DEADBYTE``) "
|
|
|
|
"and ``0xFB`` (``PYMEM_FORBIDDENBYTE``) have been replaced with ``0xCD``, "
|
|
|
|
"``0xDD`` and ``0xFD`` to use the same values than Windows CRT debug "
|
|
|
|
"``malloc()`` and ``free()``."
|
2019-05-23 16:59:19 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:594
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "The pymalloc allocator"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:596
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Python has a *pymalloc* allocator optimized for small objects (smaller or "
|
|
|
|
"equal to 512 bytes) with a short lifetime. It uses memory mappings called "
|
2018-06-28 13:32:56 +00:00
|
|
|
"\"arenas\" with a fixed size of 256 KiB. It falls back to :c:func:"
|
2016-10-30 09:46:26 +00:00
|
|
|
"`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger than "
|
|
|
|
"512 bytes."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:601
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
2018-06-28 13:32:56 +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-10-30 09:46:26 +00:00
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:605
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "The arena allocator uses the following functions:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:607
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows,"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:608
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`mmap` and :c:func:`munmap` if available,"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:609
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ":c:func:`malloc` and :c:func:`free` otherwise."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:611
|
|
|
|
msgid ""
|
|
|
|
"This allocator is disabled if Python is configured with the :option:`--"
|
|
|
|
"without-pymalloc` option. It can also be disabled at runtime using the :"
|
|
|
|
"envvar:`PYTHONMALLOC` environment variable (ex: ``PYTHONMALLOC=malloc``)."
|
|
|
|
msgstr ""
|
|
|
|
|
|
|
|
#: c-api/memory.rst:616
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Customize pymalloc Arena Allocator"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:622
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"Structure used to describe an arena allocator. The structure has three "
|
|
|
|
"fields:"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:630
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "``void* alloc(void *ctx, size_t size)``"
|
|
|
|
msgstr "``void* alloc(void *ctx, size_t size)``"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:630
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "allocate an arena of size bytes"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:632
|
2021-03-19 16:27:36 +00:00
|
|
|
#, fuzzy
|
|
|
|
msgid "``void free(void *ctx, void *ptr, size_t size)``"
|
|
|
|
msgstr "``void free(void *ctx, void *ptr)``"
|
2016-10-30 09:46:26 +00:00
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:632
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "free an arena"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:637
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Get the arena allocator."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:641
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Set the arena allocator."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:645
|
2018-06-28 13:32:56 +00:00
|
|
|
msgid "tracemalloc C API"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:651
|
2020-05-24 14:31:50 +00:00
|
|
|
msgid "Track an allocated memory block in the :mod:`tracemalloc` module."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:653
|
2020-05-24 14:31:50 +00:00
|
|
|
msgid ""
|
|
|
|
"Return ``0`` on success, return ``-1`` on error (failed to allocate memory "
|
|
|
|
"to store the trace). Return ``-2`` if tracemalloc is disabled."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:656
|
2020-05-24 14:31:50 +00:00
|
|
|
msgid "If memory block is already tracked, update the existing trace."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:660
|
2020-05-24 14:31:50 +00:00
|
|
|
msgid ""
|
|
|
|
"Untrack an allocated memory block in the :mod:`tracemalloc` module. Do "
|
|
|
|
"nothing if the block was not tracked."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:663
|
2020-05-24 14:31:50 +00:00
|
|
|
msgid "Return ``-2`` if tracemalloc is disabled, otherwise return ``0``."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:669
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "Examples"
|
|
|
|
msgstr "Exemples"
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:671
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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::"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:684
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid "The same code using the type-oriented function set::"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:696
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"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. ::"
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:711
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"In addition to the functions aimed at handling raw memory blocks from the "
|
|
|
|
"Python heap, objects in Python are allocated and released with :c:func:"
|
|
|
|
"`PyObject_New`, :c:func:`PyObject_NewVar` and :c:func:`PyObject_Del`."
|
|
|
|
msgstr ""
|
|
|
|
|
2021-09-24 08:20:01 +00:00
|
|
|
#: c-api/memory.rst:715
|
2016-10-30 09:46:26 +00:00
|
|
|
msgid ""
|
|
|
|
"These will be explained in the next chapter on defining and implementing new "
|
|
|
|
"object types in C."
|
|
|
|
msgstr ""
|
2021-03-19 16:27:36 +00:00
|
|
|
|
|
|
|
#~ msgid "``void free(void *ctx, size_t size, void *ptr)``"
|
|
|
|
#~ msgstr "``void free(void *ctx, size_t size, void *ptr)``"
|