pymalloc 分配器
Python 有为具有短生命周期的小对象(小于或等于 512 字节)优化的 pymalloc 分配器。它使用固定大小为 256 KiB 的称为 “arenas” 的内存映射。对于大于512字节的分配,它回到使用 PyMem_RawMalloc()
和 PyMem_RawRealloc()
。
pymalloc 是 PYMEM_DOMAIN_MEM
(例如: PyMem_Malloc()
) 和 PYMEM_DOMAIN_OBJ
(例如: PyObject_Malloc()
) 域的 默认分配器 。
arena 分配器使用以下函数:
Windows 上的
VirtualAlloc()
和VirtualFree()
,mmap()
和munmap()
,如果可用,否则,
malloc()
和free()
。
自定义 pymalloc Arena 分配器
3.4 新版功能.
PyObjectArenaAllocator
用来描述一个 arena 分配器的结构体。这个结构体有三个字段:
域 | 含义 |
---|---|
| 作为第一个参数传入的用户上下文 |
| 分配一块 size 字节的区域 |
| 释放一块区域 |
void PyObject_GetArenaAllocator
(PyObjectArenaAllocator *allocator)
获取 arena 分配器
void PyObject_SetArenaAllocator
(PyObjectArenaAllocator *allocator)
设置 arena 分配器