Uso della memoria da parte di un programma, nozione di stack e Heap

Quando un programma viene avviato gli viene messa a disposizione della memoria e questa memoria ha diversi utilizzi:
  • CODE: è un area destinata all' istruzioni eseguibili del programma 
  • VARIABILI GLOBALI: è un area destinata a contenere variabili globali che servono all'esecuzione di tutto il programma ovvero variabili non definite all'interno delle funzioni ma al di fuori
  • HEAP: area destinata alla collocazione di oggetti non hanno una dimensione predefinita ma sono destinati a crescere dinamicamente. In questa area ci andranno tutti i reference type.
  • STACK:  per allocazione di oggetti che hanno definizione predefinita e per tutte le informazioni relative alle chiamate. In questa area sono destinati i value type.

Lo stack è suddiviso in stack frames , ciascuna di queste aree di memoria è destinata ad ogni singola funzione. Negli stack frames ci sono varie informazioni e le più importanti sono:
  • Variabili locali (value type) definite all’interno della funzione;
  • Parametri della funzione;
  • Indirizzo di ritorno.
Gli stack frames seguono uno schema detto LIFO ovvero "Last in, First Out" ovvero ogni qual volta ci sono chiamate funzionali la stack cresce o decresce in base se le funzioni vengono chiamate o ritonano, le new entry vengono sempre aggiunte in cima e via via così vengono rimosse. lo Stack  se a causa di un eccesso di chiamate supera la dimensione prestabilita (1gb per i programmi a 32 bit, 4gb per quelli a 64 bit), genera un’eccezione detta “Stack Overflow“.

Commenti

Post popolari in questo blog

Alcuni esempi di strategie di trading algoritmico utilizzate

Processi stocastici con mean reversion: Ornstein–Uhlenbeck process, Dixit & Pindyck Model, Vasicek model, etc

La formula di Legendre e la sua utilità nelle applicazioni