Hasty Briefsbeta

双语

First Steps into Memory Management in Python

2 days ago
  • Python 使用两种内存分配方法:pymalloc 用于 ≤512 字节的对象,malloc(PyMem_RawMalloc)用于更大的对象。
  • Pymalloc 从操作系统请求 arenas;每个 arena 有 64 个 pools,每个 pool 有固定大小的块;对象占用 pool 中的空闲块。
  • 只有当内存页第一次被写入时,从操作系统角度来看内存才变得真实;pymalloc 仅在所有 arena 都没有空间时才请求新的 arena。
  • 只有当所有 pool 都为空时,arenas 才会返回给操作系统;单个存活的对象会阻止其整个 arena 被释放。
  • 更大的对象(>512 字节)使用 malloc;释放通常保留内存以供重用,只有非常大的块才会返回给操作系统。
  • 内存释放使用引用计数:当引用被移除时,每个对象的计数减少;计数为零时,对象立即被释放。
  • 垃圾回收器处理引用计数无法处理的循环引用;它使用分代收集(gen0、gen1、gen2)定期检查容器对象。
  • 实际经验:你可以通过管理变量作用域、使用 del 或直接将对象传递给函数来控制对象的生命周期。
  • 研究 Python 内部原理是深入且有益的;作者发现这很有趣,并学到了很多关于内存管理的知识。