原始内存接口
以下函数集封装了系统分配器。这些函数是线程安全的,不需要持有 全局解释器锁。
default raw memory allocator 使用这些函数:malloc()
、 calloc()
、 realloc()
和 free()
;申请零字节时则调用 malloc(1)
(或 calloc(1, 1)
)
3.4 新版功能.
void* PyMem_RawMalloc
(size_t n)
分配 n 个字节并返回一个指向分配的内存的 void*
类型指针,如果请求失败则返回 NULL
。
请求零字节可能返回一个独特的非 NULL
指针,就像调用了 PyMem_RawMalloc(1)
一样。但是内存不会以任何方式被初始化。
void* PyMem_RawCalloc
(size_t nelem, size_t elsize)
分配 nelem 个元素,每个元素的大小为 elsize 字节,并返回指向分配的内存的 void*
类型指针,如果请求失败则返回 NULL
。 内存会被初始化为零。
请求零字节可能返回一个独特的非 NULL
指针,就像调用了 PyMem_RawCalloc(1, 1)
一样。
3.5 新版功能.
void* PyMem_RawRealloc
(void *p, size_t n)
将 p 指向的内存块大小调整为 n 字节。以新旧内存块大小中的最小值为准,其中内容保持不变,
如果 p 是 NULL
,则相当于调用 PyMem_RawMalloc(n)
;如果 n 等于 0,则内存块大小会被调整,但不会被释放,返回非 NULL
指针。
除非 p 是 NULL
,否则它必须是之前调用 PyMem_RawMalloc()
、 PyMem_RawRealloc()
或 PyMem_RawCalloc()
所返回的。
如果请求失败,PyMem_RawRealloc()
返回 NULL
, p 仍然是指向先前内存区域的有效指针。
void PyMem_RawFree
(void *p)
释放 p 指向的内存块。 p 必须是之前调用 PyMem_RawMalloc()
、 PyMem_RawRealloc()
或 PyMem_RawCalloc()
所返回的指针。否则,或在 PyMem_RawFree(p)
之前已经调用过的情况下,未定义的行为会发生。
如果 p 是 NULL
, 那么什么操作也不会进行。