对象分配器

以下函数集,仿照 ANSI C 标准,并指定了请求零字节时的行为,可用于从Python堆分配和释放内存。

默认对象分配器 使用 pymalloc 内存分配器.

警告

在使用这些函数时,必须持有 全局解释器锁(GIL)

void* PyObject_Malloc(size_t n)

分配 n 个字节并返回一个指向分配的内存的 void* 类型指针,如果请求失败则返回 NULL

请求零字节可能返回一个独特的非 NULL 指针,就像调用了 PyObject_Malloc(1) 一样。但是内存不会以任何方式被初始化。

void* PyObject_Calloc(size_t nelem, size_t elsize)

分配 nelem 个元素,每个元素的大小为 elsize 字节,并返回指向分配的内存的 void* 类型指针,如果请求失败则返回 NULL。 内存会被初始化为零。

请求零字节可能返回一个独特的非 NULL 指针,就像调用了 PyObject_Calloc(1, 1) 一样。

3.5 新版功能.

void* PyObject_Realloc(void *p, size_t n)

p 指向的内存块大小调整为 n 字节。以新旧内存块大小中的最小值为准,其中内容保持不变,

如果*p*是``NULL``,则相当于调用 PyObject_Malloc(n) ;如果 n 等于 0,则内存块大小会被调整,但不会被释放,返回非 NULL 指针。

除非 pNULL ,否则它必须是之前调用 PyObject_Malloc()PyObject_Realloc()PyObject_Calloc() 所返回的。

如果请求失败,PyObject_Realloc() 返回 NULLp 仍然是指向先前内存区域的有效指针。

void PyObject_Free(void *p)

释放 p 指向的内存块。 p 必须是之前调用 PyObject_Malloc()PyObject_Realloc()PyObject_Calloc() 所返回的指针。否则,或在 PyObject_Free(p) 之前已经调用过的情况下,未定义行为会发生。

如果 pNULL, 那么什么操作也不会进行。