2010-03-01 12 views
16

In C#, i tipi di valore (es .: int, float, ecc.) Sono memorizzati nello stack. I parametri del metodo possono anche essere memorizzati nello stack. La maggior parte di tutto il resto, tuttavia, è archiviata nell'heap. Ciò include elenchi, oggetti, ecc.CPython - Internamente, cosa viene memorizzato nello stack e nell'heap?

Mi chiedevo, CPython fa la stessa cosa internamente? Cosa memorizza nello stack e cosa mette in pila?

+0

Immagino tu voglia dire * "La maggior parte di tutto il resto, tuttavia, è memorizzata nell'heap **." * –

+8

Probabilmente intendevi dire "CPython", non "Python". Python è un linguaggio; non ha opinioni su dove gli oggetti dovrebbero essere archiviati, a patto che l'implementazione rispetti la semantica richiesta da Python. CPython è l'implementazione di Python scritto in C che molti usano. Le risposte di John Feminella e Alex Martelli sono entrambe relative a CPython. PyPy, Jython e IronPython hanno le proprie opinioni su dove archiviare gli oggetti; purtroppo non ne so nulla. –

+0

@BlueRaja - Grazie, buona cattura. –

risposta

20

Tutti gli oggetti Python nell'implementazione CPython vanno in pila. Si può leggere in dettaglio come funziona la gestione della memoria di Python here nella documentazione:

gestione della memoria in Python comporta un mucchio privato contenente tutti gli oggetti Python e le strutture dati. La gestione di questo heap privato è garantita internamente dal gestore di memoria Python. Il gestore della memoria Python ha componenti diversi che si occupano di vari aspetti della gestione dinamica dello storage, come la condivisione, la segmentazione, la preallocazione o il caching.

Si noti che Python stesso è solo un linguaggio e non dice nulla su come gli interni come la gestione della memoria dovrebbero funzionare; questo è un dettaglio lasciato agli implementatori.

11

runtime di Python si occupa solo riferimenti agli oggetti (che vivono tutti nel mucchio): ciò che va sulla pila di Python (come operandi e dei risultati delle sue operazioni bytecode) sono sempre riferimenti (ai valori che vivono altrove).

+3

Spiegherebbe di più su 'cosa succede Lo stack di Python è sempre referenza' o fornisce qualche riferimento? – laike9m

Problemi correlati