文章

随笔

25. 内存管理漫游-7

关于内存池 pool 的操作已经大致比较清楚了。简而言之就是以 pool 为单位,管理了一系列连续的 block。比 pool 更高一级的是 arena,是 pool 的集合。arena 的结构看起来这样: arena …

阅读全文
随笔

24. 内存管理漫游-6

到目前为止,有关内存池的操作已经大体清楚了: 内存池 pool 的大小正好是操作系统内存页的尺寸:4K; 内存池的结构体在 pool 内存的头部,与其管理的内存连续; 内存池被分割为相同大小的 block,block 大 …

阅读全文
随笔

23. 内存管理漫游-5

现在 Python 中内存分配的最核心组件 pool 的工作原理大致清楚了,在 Python 中存在很多 pool,每个内存池内部有有大小相同的 block,不同内存池的 block 尺寸可能不同。 那么下来就有一个问题 …

阅读全文
随笔

22. 内存管理漫游-4

到目前为止,我们将 Python 管理的连续内存块设置为 4K 的 pool,恰好为多数操作系统的内存分页尺寸,这可以大大的提高操作系统的内存管理性能。如何充分利用这 4K 的内存池就是目前要考虑的问题了,一种简单的做法 …

阅读全文
随笔

21. 内存管理漫游-3

前面已经在 pymalloc alloc 中找到了小内存分配的代码,回顾一下,除了 size 为 0 或者大于 512 Bytes 的内存,都算作小内存,尝试在内存池中分配。按照内存池的设计思路,会预先申请一个 “足够” …

阅读全文
随笔

20. Python 内存管理漫游-2

Python 对内存进行了多层抽象: 0 层就是最基本的 C 库,我们熟悉的 malloc、free 等函数就在这一层; 1 层是对 C 库内存管理接口的封装,基本上只是对 malloc、free 的代理函数,主要是处理 …

阅读全文
随笔

19. Python 内存管理漫游-1

目前已经介绍了两种不可变类型 int 和 string,另外大致了解了一种容器 List,基本类型还差 Dict 没有涉及到,Dict 广泛应用于 Python 的方方面面,我打算稍晚再处理。通过阅读前面三种基本数据类型 …

阅读全文
随笔

18. List 切片

从 List 中删除元素与 pop 类似,只不过会将弹出元素直接删除,内存操作及性能大体相同,不再赘述。 List 通过切片快速截取片段,切片需要指定起、止索引,过程也很简单,实现如下: 切片实际上是从创建原始 List …

阅读全文
随笔

17. 向 List Object append 和 pop 元素

append 向 List Object 任意位置插入数据,只要插入位置不是结尾,那么就需要将插入位置之后的元素后移,因此插入数据的时间复杂度为 O(n)。向数据插入数据有一个特例位置,向尾部追加 append 一个元素 …

阅读全文