Python是否有堆栈/堆,并且如何管理内存?

如何在Python中管理变量和内存?它有堆栈和堆吗?使用什么算法来管理内存?有了这些知识,对于大量/数据处理的内存管理有什么建议吗?



墨色风雨
浏览 1886回答 2
2回答

白猪掌柜的

如何在Python中管理变量和内存。自动地!不,真的,您只是创建一个对象,Python虚拟机将处理所需的内存以及将其放置在内存布局中的位置。它有堆栈和堆吗?使用什么算法来管理内存?当我们谈论CPython它时,使用私有堆来存储对象。从CPython C API文档中:Python中的内存管理涉及一个包含所有Python对象和数据结构的私有堆。此私有堆的管理由Python内存管理器在内部确保。Python内存管理器具有不同的组件,这些组件处理各种动态存储管理方面的问题,例如共享,分段,预分配或缓存。内存回收主要通过引用计数来处理。也就是说,Python VM保留一个内部日志,记录有多少引用引用了一个对象,并且在没有更多引用引用该对象时自动对其进行垃圾回收。此外,还有一种机制可以通过检测对象的“孤岛” 来中断循环引用(引用计数无法处理),这与尝试查找所有可到达对象的传统GC算法有些相反。注意:请记住,此信息是CPython特定的。其他Python实现,比如pypy,iron python,jython当谈到自己的实现细节和其他人可能来自彼此之间以及与CPython的不同。为了更好地理解它,可能有助于理解Python的语义(语言)和底层实现之间存在差异有了这些知识,对于大量/数据处理的内存管理有什么建议吗?现在我不能谈论这个,但是我确定NumPy(最流行的用于数字运算的python库)具有可以优雅地处理内存消耗的机制。

慕侠2389804

Python没有任何这样的东西。Python是该语言,并且未指定实现必须如何准确实现 Python语言所定义的语义。每个实现(CPython,PyPy,IronPython,Stackless,Jython ...)都可以自由地做自己的事情!在C Python中,所有对象都驻留在堆中:Python中的内存管理涉及一个包含所有Python对象和数据结构的私有堆。1个CPython虚拟机是基于堆栈的:>>> def g():    x = 1    y = 2    return f(x, y)>>> import dis>>> dis.dis(g)  2           0 LOAD_CONST           1 (1) # Push 1 onto the stack              3 STORE_FAST           0 (x) # Stores top of stack into local var x  3           6 LOAD_CONST           2 (2) # Push 2 onto stack              9 STORE_FAST           1 (y) # Store TOS into local var y  4          12 LOAD_GLOBAL          0 (f) # Push f onto stack             15 LOAD_FAST            0 (x) # Push x onto stack             18 LOAD_FAST            1 (y) # Push y onto stack             21 CALL_FUNCTION        2     # Execute function with 2                                            # f's return value is pushed on stack             24 RETURN_VALUE               # Return TOS to caller (result of f)请记住,这是CPython特有的。尽管堆栈不包含实际值,但它保留了对那些对象的引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python