python中分为大内存和小内存:
- 大内存使用malloc进行分配
- 小内存使用内存池进行分配
- python的内存池(金字塔):
- 第三层:最上层,用户对python的直接操作
- 第一层和第二层:内存池,有python的接口函数PyMem_Malloc实现 — 若请求分配的内存在1-256字节之间就使用内存池管理系统进行分配,调用malloc函数分配内存,但是每次只会分配一块大小为256k的大块内存,不会调用free函数释放内存,将该内存块留在内存池中以便下次使用。
堆内存和栈内存
对象的本质就是一个内存块,拥有特定的值,支持特定类型的相关操作
在python中,变量也称为对象的引用,因为,变量存储的就是对象的地址,变量通过地址引用了对象
变量位于栈内存,对象位于堆内存
栈
是一种连续的数据结构,具有先进后出的特性
内存空间由操作系统自动分配和释放
栈溢出
由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。
堆
是一种非连续的树形存储结构,每个节点有一个值,整棵树是经过排序的。特点是根节点的值最小(或最大),且根节点的两个子树也是一个堆。常用来实现优先队列,存取随意
内存空间手动申请和释放,申请慢,且必须由程序员销毁