Python 有 C 程序中的堆或堆栈的概念吗?

2019-07-23 20:44:40 +08:00
 tinydebian
CPython 是由 C 语言开发的。请问几个关于 Python 内存的问题。

1 ) Python 有 C 程序中的堆或堆栈的概念吗?

2 )将参数传给函数,调用函数的时候,参数是像 C 语言一样,压入堆栈吗?

3 )如果有堆和堆栈的概念,Python 的垃圾回收,对于堆和堆栈,是一样的吗?

谢谢。
3186 次点击
所在节点    Python
5 条回复
lihongjie0209
2019-07-23 20:49:19 +08:00
堆栈是操作系统中进程的概念, 和语言实现无关
misaka19000
2019-07-23 20:51:41 +08:00
Python 虚拟机是使用 stack 来做函数调用的,至于有没有 堆 就不清楚了
Wincer
2019-07-23 23:48:34 +08:00
lynskylate
2019-07-23 23:51:57 +08:00
python 虚拟机是栈式虚拟机,但这里的栈只是单纯是数据结构而已,和 c 中的堆栈不一样。

python 也会压参数进虚拟机的栈。具体自己使用 dis 模块看一下

因为没有类似 c 的堆栈概念,所以第三个问题不成立
sujin190
2019-07-24 17:24:32 +08:00
@misaka19000 #2
@lynskylate #4

其实 c 是栈分配局部变量,函数执行结束,变量就消失了,要函数结束变量还在,那么只能通过 malloc 在堆上分配变量

python 函数执行过程是类似的,每个函数执行分配一个栈帧,当前栈帧关联这上一个函数的栈帧,整个调用链就出来了,而 python 所有的变量分配使用的都是堆内存,函数运行是通过名称加载把名称引用的变量加载到栈帧里,之后就可以执行指令完成计算了,指令计算的结果也返回在栈帧里,再通过名称加载把变量关联到名称上

某种意义上来看这也是 python 性能不高的问题之一吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX