| Index: third_party/cython/src/Cython/Includes/cpython/mem.pxd
|
| diff --git a/third_party/cython/src/Cython/Includes/cpython/mem.pxd b/third_party/cython/src/Cython/Includes/cpython/mem.pxd
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3b3ab5be16d778dd4109ae054139f88559fb7081
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Includes/cpython/mem.pxd
|
| @@ -0,0 +1,75 @@
|
| +cdef extern from "Python.h":
|
| +
|
| + #####################################################################
|
| + # 9.2 Memory Interface
|
| + #####################################################################
|
| + # You are definitely *supposed* to use these: "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."
|
| +
|
| + # 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*.
|
| +
|
| + void PyMem_Del(void *p)
|
| + # 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 across Python versions and is
|
| + # therefore deprecated in extension modules.
|
| +
|
| + # PyMem_MALLOC(), PyMem_REALLOC(), PyMem_FREE().
|
| + # PyMem_NEW(), PyMem_RESIZE(), PyMem_DEL().
|
|
|