python内存池
分两层说清楚:pymalloc 三层内存池、常量缓存池,启动行为不一样
1. pymalloc(arena/pool/block 小块内存池)
程序刚启动时是空的,不会提前预分配内存
- 刚执行脚本,还没创建任何对象:没有 Arena、没有 Pool,没向操作系统申请任何堆内存。
- 只有当你第一次创建≤512字节的小对象(int、空对象、短字符串等),CPython 才会调用系统 malloc 申请一块 4MB Arena,再拆分 Pool/Block。
- 空闲的 Block 会缓存下来反复复用;只有整块 Arena 全部空闲,才会释放还给系统。
简单记:用时才分配,启动不预装。
2. 内置常量缓存池,进程一启动就直接存在
这部分程序刚跑就自带,提前初始化完成:
- 小整数池 [-5, 256]
解释器初始化阶段直接创建全部整数对象,全程常驻内存,从启动到结束不销毁。 - 字符串驻留池
全局哈希表启动即创建,运行中动态存入字符串,但容器本身开机就有。 - 内置容器 free_list 缓存链表
list、dict、tuple 等的空闲对象链表,启动时初始化空链表,创建销毁对象后才会填充复用。
总结
- 负责业务对象分配的三层内存池(arena/pool):启动没有,用到才创建;
- 整数缓存、驻留字符串全局表这类常量池:程序一运行就存在。

浙公网安备 33010602011771号