pymalloc 分配器

Python 有为具有短生命周期的小对象(小于或等于 512 字节)优化的 pymalloc 分配器。它使用固定大小为 256 KiB 的称为 “arenas” 的内存映射。对于大于512字节的分配,它回到使用 PyMem_RawMalloc()PyMem_RawRealloc()

pymallocPYMEM_DOMAIN_MEM (例如: PyMem_Malloc()) 和 PYMEM_DOMAIN_OBJ (例如: PyObject_Malloc()) 域的 默认分配器

arena 分配器使用以下函数:

  • Windows 上的 VirtualAlloc()VirtualFree() ,

  • mmap()munmap() ,如果可用,

  • 否则, malloc()free()

自定义 pymalloc Arena 分配器

3.4 新版功能.

PyObjectArenaAllocator

用来描述一个 arena 分配器的结构体。这个结构体有三个字段:

含义

void ctx

作为第一个参数传入的用户上下文

void alloc(void ctx, size_t size)

分配一块 size 字节的区域

void free(void ctx, size_t size, void *ptr)

释放一块区域

void PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)

获取 arena 分配器

void PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)

设置 arena 分配器