9.2 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 memory from the Python
heap:
-
| void* PyMem_Malloc( |
size_t n) |
- Allocates n bytes and returns a pointer of type void*
to the allocated memory, or NULL if the request fails.
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.
-
| void* PyMem_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. 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. Unless p is NULL, it must have been returned by a previous call to PyMem_Malloc() or PyMem_Realloc().
| void PyMem_Free( |
void *p) |
- Frees the memory block pointed to by p, which must have been returned by a
previous call to PyMem_Malloc() or PyMem_Realloc().
Otherwise, or if PyMem_Free(p) has been called before,
undefined behavior occurs. If p is NULL, no operation
is performed.
The following type-oriented macros are provided for convenience. Note that TYPE
refers to any C type.
-
| TYPE* PyMem_New( |
TYPE, size_t n) |
- Same as PyMem_Malloc(), but allocates
(n *
sizeof(TYPE)) bytes of memory. Returns a pointer cast to TYPE*. The memory will not have been initialized in any way.
-
| TYPE* PyMem_Resize( |
void *p, TYPE, size_t n) |
- Same as PyMem_Realloc(), but the memory block is resized to
(n
* sizeof(TYPE)) bytes. Returns a pointer cast to TYPE*.
-
- Same as PyMem_Free().
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 accross Python versions and is therefore deprecated in
extension modules.
PyMem_MALLOC(), PyMem_REALLOC(), PyMem_FREE().
PyMem_NEW(), PyMem_RESIZE(), PyMem_DEL().
|