2010-03-01 23 views
16

En C#, los tipos de valores (por ejemplo: int, float, etc.) se almacenan en la pila. Los parámetros del método también se pueden almacenar en la pila también. La mayoría de todo lo demás, sin embargo, se almacena en el montón. Esto incluye listas, objetos, etc.CPython: internamente, ¿qué se almacena en la pila y en el montón?

Me preguntaba, ¿CPython hace lo mismo internamente? ¿Qué almacena en la pila y qué pone en el montón?

+0

Supongo que quiere decir * "La mayoría de todo lo demás, sin embargo, está almacenado en el ** montón **." * –

+8

Probablemente quiso decir "CPython", no "Python". Python es un lenguaje; no tiene una opinión sobre dónde deben almacenarse los objetos, siempre que la implementación respete la semántica que Python requiere. CPython es la implementación de Python escrita en C que usa la mayoría de la gente. Las respuestas de John Feminella y Alex Martelli debajo de ambas pertenecen a CPython. PyPy, Jython e IronPython tienen sus propias opiniones sobre dónde almacenar objetos; por desgracia, no sé nada de ellos. –

+0

@BlueRaja - Gracias, buena captura. –

Respuesta

20

Todos los objetos de Python en la implementación de CPython van en el montón. Se puede leer en detalle la forma de gestión de memoria de Python funciona here en la documentación:

gestión de memoria en Python implica un montón privada que contiene todos los objetos de Python y estructuras de datos. La administración de este montón privado está asegurada internamente por el administrador de memoria de Python. El administrador de memoria Python tiene diferentes componentes que se ocupan de varios aspectos de gestión de almacenamiento dinámico, como compartir, segmentar, preasignar o almacenar en caché.

Tenga en cuenta que Python en sí es solo un lenguaje, y no dice nada sobre cómo deberían funcionar las funciones internas, como la gestión de memoria; este es un detalle que queda para los implementadores.

11

tiempo de ejecución de Python sólo se ocupa de las referencias a objetos (que todos viven en el montón): lo que sucede en la pila de Python (como operandos y resultados de sus operaciones de código de bytes) son siempre referencias (a valores que viven en otra parte).

+3

¿Podría explicar más sobre 'lo que sucede en la pila de Python siempre son referencias' o proporcionar alguna referencia? – laike9m

Cuestiones relacionadas