内存是否分配给 CPython 中堆栈上的指针?

Is memory allocated to pointers on the stack in CPython?

(CPython 实现) 在 x = 3 中,我知道包含原始值 3int 对象的内存分配在堆上。 x(作为对int对象的引用)分配在栈上还是堆上?

CPython 实现中的对象分配在堆上,“堆栈帧”也是如此。 “堆栈帧”大小在编译时预先计算。

然而,由于我不是 100% 清楚的原因,有一个 C 堆栈用于嵌套函数调用(但是不适用于参数或局部变量)。这仍然意味着 CPython 上的无限递归将崩溃,因为 C 堆栈耗尽远早于 运行 内存不足。无论 Python 代码中的调用嵌套有多深,都可以实现 VM 使用固定数量的 C 堆栈,但事实并非如此。

另请注意,小整数(例如 3)是共享的,即并不总是分配新的整数对象。作为整数不可变,这很难注意到,除非使用 id,但出于速度原因这是一个重要的优化。