由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题。
在C/C++中采用用户自己管理维护内存的方式。自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露、悬空指针等bug埋下隐患。
因此在现在的高级语言(java、C#等)都采用了垃圾收集机制。
python也采用了垃圾收集机制,采用引用计算机制为主,标记——清除和分代收集两种机制为辅的策略。
一、引用计数机制
python里每一个东西都是对象,它们的核心就是一个结构体:PyObject。
typedef struct_object { int ob_refcnt; struct_typeobject *ob_type; } PyObject;
PyObject是每个对象必有的内容,其中ob_refcnt
就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt
就会增加,当引用它的对象被删除,它的ob_refcnt
就会减少。
#define Py_INCREF(op) ((op)->ob_refcnt++) //增加计数 #define Py_DECREF(op) \ //减少计数 if (--(op)->ob_refcnt != 0) \ ; \ else \ __Py_Dealloc((PyObject *)(op))
引用计数为0时,该对象声明就结束了。
1、引用计数机制优点
2、引用计数机制缺点
转载地址:http://my.oschina.net/hebianxizao/blog/57367?fromerr=KJozamtm