Python和C++的内存管理机制

1 Python内存管理机制

Python内存管理机制主要是以下三个方面:

  • 引用计数机制
  • 垃圾回收机制
  • 内存池机制

引用计数
对于Python的每一个对象,Python都采用了类似Windows内核对象一样的方式对内存进行管理,来维护该对象的引用的计数。
对于以下的例子:

a=1

我们将a称为对象1的引用,引用a指向对象1,这时对象1的引用计数为1我们可以看再看下面的例子深入理解引用:
Python和C++的内存管理机制_第1张图片
可以看出a,b都是1的引用,他们的地址相同,也就是1个对象,两个引用都指向1,这时其引用计数是2,下面我们来修改a的值,观察有什么变化:
Python和C++的内存管理机制_第2张图片
a的值变为2,b的值变为1,且b的地址为原先的地址,a的地址为一个新的地址,而对象1的引用计数为1,对象2的引用计数也为1,而当引用计数变为0的时候就会被回收掉
引用计数增加的情况:

  • 对象被创建:x=1
  • 用对象的引用创建了其他引用:y=x
  • 被作为参数传递给函数:foo(x)
  • 作为容器对象的一个元素:a=[1,x,’33]

引用计数减少的情况:

  • 对象的别名被显式的销毁:del x
  • 对象的别名被赋值给其他对象:如上面的a=2,使得1的引用计数减1
  • 一个本地引用离开了它的作用域,如foo(x)函数结束时,x指向的对象引用计数减1
  • 对象从一个窗口对象中被删除:myList.remove(x)
  • 窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域

垃圾回收机制

  • 引用计数:循环引用时,会导致相互引用,每个对象的引用计数都不为0,因此对象占用的内存永远不会被释放,于是引入“标记-清除”,“分代回收”两种收集技术
  • 标记清除:见下面链接
  • 分代回收:见下面链接

内存池机制

关于垃圾回收机制详细介绍请看这里:python内存管理机制
关于内存池机制详细介绍请看这里:python内存管理机制

2 C++内存管理机制

这里C++内存管理主要从3个方面来介绍内存管理机制:

  • 内存管理

    • 内存管理详解
    • C++的健壮指针和资源管理
  • 内存泄漏

    • C++中动态内存分配引发问题的解决方案
    • 如何对付内存泄漏?
    • 浅谈C/C++内存泄漏及其检测工具
  • 内存回收

    • C++内存对象大作战
    • 浅议C++中的垃圾回收方法

还有一个博客,这里附上链接:

  • C++内存管理学习笔记(1)
  • C++内存管理学习笔记(2)
  • C++内存管理学习笔记(3)
  • C++内存管理学习笔记(4)
  • C++内存管理学习笔记(5)
  • C++内存管理学习笔记(6)
  • C++内存管理学习笔记(7)

注:这里主要是附上了一些优秀博客的链接,进行简要的整理

你可能感兴趣的:(Python和C++的内存管理机制)