Stack: cos'è e applicazione

01/03/2020

Uno stack è un fenomeno di programmazione e una soluzione naturale. Lo stack è arrivato immediatamente al business dei computer ed è diventato una "famiglia", come se tutto fosse partito da esso.

cos'è quella pila?

Senza stack, il processore non funziona, non vi è ricorsione ed è impossibile organizzare chiamate con funzioni efficaci. Qualsiasi algoritmo può fare a meno di una coda, un elenco, una raccolta, un array o un sistema di oggetti organizzati, ma nulla, incluso tutto quanto sopra, funziona senza memoria e stack.

All'alba dell'inizio: processore, memoria e stack

La memoria ideale fornisce direttamente il valore - questi sono i livelli della macchina e un linguaggio di alto livello. Nel primo caso, il processore itera attraverso gli indirizzi di memoria ed esegue i comandi. Nel secondo caso, il programmatore manipola gli array. In entrambi gli episodi ci sono:

  • indirizzo = valore;
  • indice = valore.

L'indirizzo può essere assoluto e relativo, l'indice può essere numerico e associativo. L'indirizzo e l'indice possono essere un indirizzo diverso, non un valore, ma questi sono dettagli dell'indirizzamento indiretto. Senza memoria, il processore non può funzionare, ma senza una serie di comandi e dati - è come una barca senza remi.

Una pila di piatti è una storia tradizionale sull'essenza della pila: il concetto di pila e traduzione nella coscienza generale di tutti i giorni. Non puoi prendere il piatto dal fondo, puoi prendere solo la parte superiore, e poi tutte le piastre saranno intatte.

impilare la traduzione

Per prima cosa, tutto ciò che arriva per ultimo nella pila. La soluzione perfetta In sostanza, lo stack, come la traduzione di un'azione in un'altra, trasforma le idee sull'algoritmo come una sequenza di operazioni.

L'essenza e il concetto della pila

Processore e memoria: i principali elementi strutturali del computer. Il processore esegue comandi, manipola gli indirizzi di memoria, estrae e modifica i valori a questi indirizzi. Nel linguaggio di programmazione tutto questo viene trasformato in variabili e nei loro valori. L'essenza dello stack e il concetto di last in first out (LIFO) rimane invariato.

L'abbreviazione LIFO non viene più utilizzata più spesso di prima. Probabilmente perché le liste sono state trasformate in oggetti e le code FIFO (first in first out) vengono applicate secondo necessità. dinamica tipi di dati ha perso la sua rilevanza nel contesto della descrizione delle variabili, ma ha acquisito la sua importanza al momento dell'esecuzione delle espressioni: il tipo di dato è determinato al momento del suo utilizzo e fino a quel momento è possibile descrivere qualsiasi cosa.

ultimo nel primo fuori

Quindi, lo stack - che cos'è? Ora sai che questa domanda è irrilevante. In effetti, senza uno stack, non esiste una programmazione moderna. Qualsiasi chiamata di funzione è un trasferimento di parametri e indirizzi di ritorno. Una funzione può chiamare un'altra funzione - questo è di nuovo il passaggio di parametri e indirizzi di ritorno. Stabilire un meccanismo per invocare valori senza stack è un lavoro extra, anche se una soluzione realizzabile è certamente possibile.

Molte persone chiedono: "Stack - che cos'è?". Nel contesto di una chiamata di funzione, consiste di tre azioni:

  • salvare l'indirizzo di ritorno;
  • salvare tutte le variabili trasmesse o indirizzi a loro;
  • chiamata di funzione.

Non appena la funzione chiamata compie la sua missione, restituirà semplicemente il controllo all'indirizzo di ritorno. Una funzione può chiamare qualsiasi numero di altre funzioni, poiché il limite è imposto solo dalla dimensione della pila.

Impilare le proprietà

Uno stack non è un tipo di dati astratto, ma un meccanismo reale. A livello di processore, questo è il "motore" che raffina e integra il lavoro del ciclo del processore principale. Come l'aritmetica dei bit, la pila cattura regole di funzionamento semplici e ovvie. È sicuro e protetto

Le proprietà caratteristiche di una pila sono le dimensioni e la lunghezza degli elementi. A livello di processore, tutto è determinato dalla profondità di bit, dall'indirizzamento della memoria e dalla fisica di accesso ad esso. Una caratteristica e una tradizione interessanti: lo stack si riduce, cioè nella direzione di diminuire gli indirizzi di memoria e la memoria dei programmi e dei dati. Questo di solito è, ma non è necessario. Qui il significato è importante - è venuto per ultimo e se n'è andato per primo. Questa regola sorprendentemente semplice ti consente di creare algoritmi di lavoro interessanti principalmente nei linguaggi di alto livello. Ora non chiederai, lo stack - che cos'è.

tipo di dati astratti

Le perfette prestazioni dell'hardware sono state la norma per molto tempo, ma all'avanguardia della tecnologia dell'informazione, l'idea di uno stack assume applicazioni nuove e promettenti.

In realtà, non importa quale sia lo stack a livello di processore. Questo è un componente naturale. architettura del computer. Ma nella programmazione, lo stack dipende dall'applicazione specifica e dalle capacità del programmatore.

Array, collezioni, elenchi, code ... Stack!

Spesso le persone fanno la domanda: "Stack - che cos'è?". "Programmazione" e "sistematizzazione" sono concetti interessanti: non sono sinonimi, ma sono così strettamente correlati. La programmazione è avvenuta molto rapidamente in modo così lungo che i picchi raggiunti sembrano ideali. Molto probabilmente, non lo è. Ma ovviamente un altro.

L'idea di uno stack è diventata familiare non solo a livello dei vari linguaggi di programmazione, ma anche a livello delle loro costruzioni e capacità di creazione dei tipi di dati. Qualsiasi array ha push e pop, e i concetti "primo e ultimo elemento di un array" sono diventati tradizionali. C'erano solo elementi di array, ma oggi ci sono:

  • elementi dell'array;
  • il primo elemento dell'array;
  • ultimo elemento dell'array.

L'operazione di collocare un elemento in una matrice sposta il puntatore e recupera un elemento dall'inizio dell'array o dai suoi argomenti finali. In sostanza, si tratta dello stesso stack, ma applicato ad altri tipi di dati.

L'idea dello stack completo applicata allo sviluppatore!

È particolarmente degno di nota il fatto che i linguaggi di programmazione popolari non abbiano il costrutto dello stack. Ma danno la sua idea allo sviluppatore per intero.