python-docs-fr/c-api/memory.po

833 lines
24 KiB
Plaintext

# Copyright (C) 2001-2018, Python Software Foundation
# For licence information, see README file.
#
msgid ""
msgstr ""
"Project-Id-Version: Python 3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-24 09:01+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: FRENCH <traductions@lists.afpy.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: c-api/memory.rst:8
msgid "Memory Management"
msgstr ""
#: c-api/memory.rst:17
msgid "Overview"
msgstr "Aperçu"
#: c-api/memory.rst:19
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 ""
#: c-api/memory.rst:25
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 ""
#: c-api/memory.rst:36
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 "
"it, even if they regularly manipulate object pointers to memory blocks "
"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 ""
#: c-api/memory.rst:49
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 ""
#: c-api/memory.rst:68
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 "
"allocation of the bytes object returned as a result."
msgstr ""
#: c-api/memory.rst:72
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 ""
#: c-api/memory.rst:88
msgid ""
"The :envvar:`PYTHONMALLOC` environment variable can be used to configure the "
"memory allocators used by Python."
msgstr ""
#: c-api/memory.rst:91
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 ""
#: c-api/memory.rst:97
msgid "Raw Memory Interface"
msgstr ""
#: c-api/memory.rst:99
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 ""
#: c-api/memory.rst:103
msgid ""
"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."
msgstr ""
#: c-api/memory.rst:112 c-api/memory.rst:183 c-api/memory.rst:285
msgid ""
"Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the "
"allocated memory, or ``NULL`` if the request fails."
msgstr ""
#: c-api/memory.rst:115
msgid ""
"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."
msgstr ""
#: c-api/memory.rst:122 c-api/memory.rst:193 c-api/memory.rst:295
msgid ""
"Allocates *nelem* elements each whose size in bytes is *elsize* and returns "
"a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if "
"the request fails. The memory is initialized to zeros."
msgstr ""
#: c-api/memory.rst:126
msgid ""
"Requesting zero elements or elements of size zero bytes returns a distinct "
"non-``NULL`` pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been "
"called instead."
msgstr ""
#: c-api/memory.rst:135 c-api/memory.rst:206 c-api/memory.rst:308
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 ""
#: c-api/memory.rst:138
msgid ""
"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``."
msgstr ""
#: c-api/memory.rst:142
msgid ""
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
"func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or :c:func:"
"`PyMem_RawCalloc`."
msgstr ""
#: c-api/memory.rst:146
msgid ""
"If the request fails, :c:func:`PyMem_RawRealloc` returns ``NULL`` and *p* "
"remains a valid pointer to the previous memory area."
msgstr ""
#: c-api/memory.rst:152
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:"
"func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_RawFree(p)`` has been "
"called before, undefined behavior occurs."
msgstr ""
#: c-api/memory.rst:157 c-api/memory.rst:227 c-api/memory.rst:329
msgid "If *p* is ``NULL``, no operation is performed."
msgstr ""
#: c-api/memory.rst:163
msgid "Memory Interface"
msgstr ""
#: c-api/memory.rst:165 c-api/memory.rst:271
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 ""
#: c-api/memory.rst:169
msgid ""
"The :ref:`default memory allocator <default-memory-allocators>` uses the :"
"ref:`pymalloc memory allocator <pymalloc>`."
msgstr ""
#: c-api/memory.rst:174 c-api/memory.rst:280
msgid ""
"The :term:`GIL <global interpreter lock>` must be held when using these "
"functions."
msgstr ""
#: c-api/memory.rst:179
msgid ""
"The default allocator is now pymalloc instead of system :c:func:`malloc`."
msgstr ""
#: c-api/memory.rst:186
msgid ""
"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 "
"been initialized in any way."
msgstr ""
#: c-api/memory.rst:197
msgid ""
"Requesting zero elements or elements of size zero bytes returns a distinct "
"non-``NULL`` pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been "
"called instead."
msgstr ""
#: c-api/memory.rst:209
msgid ""
"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``."
msgstr ""
#: c-api/memory.rst:213
msgid ""
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
"func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`."
msgstr ""
#: c-api/memory.rst:216
msgid ""
"If the request fails, :c:func:`PyMem_Realloc` returns ``NULL`` and *p* "
"remains a valid pointer to the previous memory area."
msgstr ""
#: c-api/memory.rst:222
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 ""
#: c-api/memory.rst:229
msgid ""
"The following type-oriented macros are provided for convenience. Note that "
"*TYPE* refers to any C type."
msgstr ""
#: c-api/memory.rst:235
msgid ""
"Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes "
"of memory. Returns a pointer cast to :c:type:`TYPE*`. The memory will not "
"have been initialized in any way."
msgstr ""
#: c-api/memory.rst:242
msgid ""
"Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n * "
"sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE*`. On "
"return, *p* will be a pointer to the new memory area, or ``NULL`` in the "
"event of failure."
msgstr ""
#: c-api/memory.rst:247
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 ""
#: c-api/memory.rst:253
msgid "Same as :c:func:`PyMem_Free`."
msgstr ""
#: c-api/memory.rst:255
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 ""
#: c-api/memory.rst:260
msgid "``PyMem_MALLOC(size)``"
msgstr ""
#: c-api/memory.rst:261
msgid "``PyMem_NEW(type, size)``"
msgstr ""
#: c-api/memory.rst:262
msgid "``PyMem_REALLOC(ptr, size)``"
msgstr ""
#: c-api/memory.rst:263
msgid "``PyMem_RESIZE(ptr, type, size)``"
msgstr ""
#: c-api/memory.rst:264
msgid "``PyMem_FREE(ptr)``"
msgstr ""
#: c-api/memory.rst:265
msgid "``PyMem_DEL(ptr)``"
msgstr ""
#: c-api/memory.rst:269
msgid "Object allocators"
msgstr ""
#: c-api/memory.rst:275
msgid ""
"The :ref:`default object allocator <default-memory-allocators>` uses the :"
"ref:`pymalloc memory allocator <pymalloc>`."
msgstr ""
#: c-api/memory.rst:288
msgid ""
"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."
msgstr ""
#: c-api/memory.rst:299
msgid ""
"Requesting zero elements or elements of size zero bytes returns a distinct "
"non-``NULL`` pointer if possible, as if ``PyObject_Calloc(1, 1)`` had been "
"called instead."
msgstr ""
#: c-api/memory.rst:311
msgid ""
"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``."
msgstr ""
#: c-api/memory.rst:315
msgid ""
"Unless *p* is ``NULL``, it must have been returned by a previous call to :c:"
"func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:func:"
"`PyObject_Calloc`."
msgstr ""
#: c-api/memory.rst:318
msgid ""
"If the request fails, :c:func:`PyObject_Realloc` returns ``NULL`` and *p* "
"remains a valid pointer to the previous memory area."
msgstr ""
#: c-api/memory.rst:324
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 ""
#: c-api/memory.rst:335
msgid "Default Memory Allocators"
msgstr ""
#: c-api/memory.rst:337
msgid "Default memory allocators:"
msgstr ""
#: c-api/memory.rst:340
msgid "Configuration"
msgstr "Configuration"
#: c-api/memory.rst:340
msgid "Name"
msgstr "Nom"
#: c-api/memory.rst:340
msgid "PyMem_RawMalloc"
msgstr ""
#: c-api/memory.rst:340
msgid "PyMem_Malloc"
msgstr ""
#: c-api/memory.rst:340
msgid "PyObject_Malloc"
msgstr ""
#: c-api/memory.rst:342
msgid "Release build"
msgstr ""
#: c-api/memory.rst:342
msgid "``\"pymalloc\"``"
msgstr ""
#: c-api/memory.rst:342 c-api/memory.rst:344
msgid "``malloc``"
msgstr ""
#: c-api/memory.rst:342
msgid "``pymalloc``"
msgstr ""
#: c-api/memory.rst:343
msgid "Debug build"
msgstr ""
#: c-api/memory.rst:343
msgid "``\"pymalloc_debug\"``"
msgstr ""
#: c-api/memory.rst:343 c-api/memory.rst:345
msgid "``malloc`` + debug"
msgstr ""
#: c-api/memory.rst:343
msgid "``pymalloc`` + debug"
msgstr ""
#: c-api/memory.rst:344
msgid "Release build, without pymalloc"
msgstr ""
#: c-api/memory.rst:344
msgid "``\"malloc\"``"
msgstr ""
#: c-api/memory.rst:345
msgid "Debug build, without pymalloc"
msgstr ""
#: c-api/memory.rst:345
msgid "``\"malloc_debug\"``"
msgstr ""
#: c-api/memory.rst:348
msgid "Legend:"
msgstr ""
#: c-api/memory.rst:350
msgid "Name: value for :envvar:`PYTHONMALLOC` environment variable"
msgstr ""
#: c-api/memory.rst:351
msgid ""
"``malloc``: system allocators from the standard C library, C functions: :c:"
"func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`"
msgstr ""
#: c-api/memory.rst:353
msgid "``pymalloc``: :ref:`pymalloc memory allocator <pymalloc>`"
msgstr ""
#: c-api/memory.rst:354
msgid ""
"\"+ debug\": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks`"
msgstr ""
#: c-api/memory.rst:358
msgid "Customize Memory Allocators"
msgstr ""
#: c-api/memory.rst:364
msgid ""
"Structure used to describe a memory block allocator. The structure has four "
"fields:"
msgstr ""
#: c-api/memory.rst:368 c-api/memory.rst:513
msgid "Field"
msgstr "Champ"
#: c-api/memory.rst:368 c-api/memory.rst:513
msgid "Meaning"
msgstr "Signification"
#: c-api/memory.rst:370 c-api/memory.rst:515
msgid "``void *ctx``"
msgstr "``void *ctx``"
#: c-api/memory.rst:370 c-api/memory.rst:515
msgid "user context passed as first argument"
msgstr ""
#: c-api/memory.rst:372
msgid "``void* malloc(void *ctx, size_t size)``"
msgstr "``void* malloc(void *ctx, size_t size)``"
#: c-api/memory.rst:372
msgid "allocate a memory block"
msgstr ""
#: c-api/memory.rst:374
msgid "``void* calloc(void *ctx, size_t nelem, size_t elsize)``"
msgstr ""
#: c-api/memory.rst:374
msgid "allocate a memory block initialized with zeros"
msgstr ""
#: c-api/memory.rst:377
msgid "``void* realloc(void *ctx, void *ptr, size_t new_size)``"
msgstr ""
#: c-api/memory.rst:377
msgid "allocate or resize a memory block"
msgstr ""
#: c-api/memory.rst:379
msgid "``void free(void *ctx, void *ptr)``"
msgstr "``void free(void *ctx, void *ptr)``"
#: c-api/memory.rst:379
msgid "free a memory block"
msgstr ""
#: c-api/memory.rst:382
msgid ""
"The :c:type:`PyMemAllocator` structure was renamed to :c:type:"
"`PyMemAllocatorEx` and a new ``calloc`` field was added."
msgstr ""
#: c-api/memory.rst:389
msgid "Enum used to identify an allocator domain. Domains:"
msgstr ""
#: c-api/memory.rst:393 c-api/memory.rst:402 c-api/memory.rst:411
#, fuzzy
msgid "Functions:"
msgstr "Fonctions"
#: c-api/memory.rst:395
#, fuzzy
msgid ":c:func:`PyMem_RawMalloc`"
msgstr ":c:func:`PyMem_RawCalloc`,"
#: c-api/memory.rst:396
#, fuzzy
msgid ":c:func:`PyMem_RawRealloc`"
msgstr ":c:func:`PyMem_RawCalloc`,"
#: c-api/memory.rst:397
#, fuzzy
msgid ":c:func:`PyMem_RawCalloc`"
msgstr ":c:func:`PyMem_RawCalloc`,"
#: c-api/memory.rst:398
msgid ":c:func:`PyMem_RawFree`"
msgstr ""
#: c-api/memory.rst:404
#, fuzzy
msgid ":c:func:`PyMem_Malloc`,"
msgstr ":c:func:`PyMem_Calloc`,"
#: c-api/memory.rst:405
#, fuzzy
msgid ":c:func:`PyMem_Realloc`"
msgstr ":c:func:`PyMem_Calloc`,"
#: c-api/memory.rst:406
#, fuzzy
msgid ":c:func:`PyMem_Calloc`"
msgstr ":c:func:`PyMem_Calloc`,"
#: c-api/memory.rst:407
msgid ":c:func:`PyMem_Free`"
msgstr ""
#: c-api/memory.rst:413
msgid ":c:func:`PyObject_Malloc`"
msgstr ""
#: c-api/memory.rst:414
msgid ":c:func:`PyObject_Realloc`"
msgstr ""
#: c-api/memory.rst:415
msgid ":c:func:`PyObject_Calloc`"
msgstr ""
#: c-api/memory.rst:416
msgid ":c:func:`PyObject_Free`"
msgstr ""
#: c-api/memory.rst:420
msgid "Get the memory block allocator of the specified domain."
msgstr ""
#: c-api/memory.rst:425
msgid "Set the memory block allocator of the specified domain."
msgstr ""
#: c-api/memory.rst:427
msgid ""
"The new allocator must return a distinct non-``NULL`` pointer when "
"requesting zero bytes."
msgstr ""
#: c-api/memory.rst:430
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 ""
#: c-api/memory.rst:434
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 ""
#: c-api/memory.rst:441
msgid "Setup hooks to detect bugs in the Python memory allocator functions."
msgstr ""
#: c-api/memory.rst:443
msgid ""
"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``)."
msgstr ""
#: c-api/memory.rst:447
msgid "Runtime checks:"
msgstr ""
#: c-api/memory.rst:449
msgid ""
"Detect API violations, ex: :c:func:`PyObject_Free` called on a buffer "
"allocated by :c:func:`PyMem_Malloc`"
msgstr ""
#: c-api/memory.rst:451
msgid "Detect write before the start of the buffer (buffer underflow)"
msgstr ""
#: c-api/memory.rst:452
msgid "Detect write after the end of the buffer (buffer overflow)"
msgstr ""
#: c-api/memory.rst:453
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 :"
"c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called"
msgstr ""
#: c-api/memory.rst:458
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 ""
#: c-api/memory.rst:463
msgid ""
"These hooks are :ref:`installed by default <default-memory-allocators>` if "
"Python is compiled in debug mode. The :envvar:`PYTHONMALLOC` environment "
"variable can be used to install debug hooks on a Python compiled in release "
"mode."
msgstr ""
#: c-api/memory.rst:468
msgid ""
"This 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:475
msgid ""
"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()``."
msgstr ""
#: c-api/memory.rst:485
msgid "The pymalloc allocator"
msgstr ""
#: c-api/memory.rst:487
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 "
"\"arenas\" with a fixed size of 256 KiB. It falls back to :c:func:"
"`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger than "
"512 bytes."
msgstr ""
#: c-api/memory.rst:492
msgid ""
"*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."
msgstr ""
#: c-api/memory.rst:496
msgid "The arena allocator uses the following functions:"
msgstr ""
#: c-api/memory.rst:498
msgid ":c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows,"
msgstr ""
#: c-api/memory.rst:499
msgid ":c:func:`mmap` and :c:func:`munmap` if available,"
msgstr ""
#: c-api/memory.rst:500
msgid ":c:func:`malloc` and :c:func:`free` otherwise."
msgstr ""
#: c-api/memory.rst:503
msgid "Customize pymalloc Arena Allocator"
msgstr ""
#: c-api/memory.rst:509
msgid ""
"Structure used to describe an arena allocator. The structure has three "
"fields:"
msgstr ""
#: c-api/memory.rst:517
msgid "``void* alloc(void *ctx, size_t size)``"
msgstr "``void* alloc(void *ctx, size_t size)``"
#: c-api/memory.rst:517
msgid "allocate an arena of size bytes"
msgstr ""
#: c-api/memory.rst:519
msgid "``void free(void *ctx, size_t size, void *ptr)``"
msgstr "``void free(void *ctx, size_t size, void *ptr)``"
#: c-api/memory.rst:519
msgid "free an arena"
msgstr ""
#: c-api/memory.rst:524
msgid "Get the arena allocator."
msgstr ""
#: c-api/memory.rst:528
msgid "Set the arena allocator."
msgstr ""
#: c-api/memory.rst:532
msgid "tracemalloc C API"
msgstr ""
#: c-api/memory.rst:538
msgid "Track an allocated memory block in the :mod:`tracemalloc` module."
msgstr ""
#: c-api/memory.rst:540
msgid ""
"Return ``0`` on success, return ``-1`` on error (failed to allocate memory "
"to store the trace). Return ``-2`` if tracemalloc is disabled."
msgstr ""
#: c-api/memory.rst:543
msgid "If memory block is already tracked, update the existing trace."
msgstr ""
#: c-api/memory.rst:547
msgid ""
"Untrack an allocated memory block in the :mod:`tracemalloc` module. Do "
"nothing if the block was not tracked."
msgstr ""
#: c-api/memory.rst:550
msgid "Return ``-2`` if tracemalloc is disabled, otherwise return ``0``."
msgstr ""
#: c-api/memory.rst:556
msgid "Examples"
msgstr "Exemples"
#: c-api/memory.rst:558
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 ""
#: c-api/memory.rst:571
msgid "The same code using the type-oriented function set::"
msgstr ""
#: c-api/memory.rst:583
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 ""
#: c-api/memory.rst:598
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 ""
#: c-api/memory.rst:602
msgid ""
"These will be explained in the next chapter on defining and implementing new "
"object types in C."
msgstr ""