Ci sono quattro modi per osservare questo:
1) Come semplice metafora senza senso. Chiamare l'elemento più nuovo in cima, in fondo o davanti allo stack è semplicemente una scelta idiomatica. So per certo che alcune persone la pensano in questo modo. E in cima c'è la risposta popolare. E a causa loro non puoi fare affidamento sul prossimo modo di guardare questo a meno che tu non lo controlli da solo.
2) Come dettaglio di implementazione. Le pile devono cambiare il loro indirizzo man mano che crescono. Uno stack che cresce deve cambiare il suo indirizzo in un modo particolare. Una pila che cresce o scende indica se l'indirizzo aumenta o diminuisce man mano che crescono.
3) Come dettaglio di implementazione offuscato da una scelta idiomatica. Chi diavolo decide che l'indirizzo di zeroth sia nella parte superiore o inferiore della memoria? Al tuo computer di certo non interessa. Vai avanti, capovolgilo. I tuoi frammenti di memoria non cadono. Le schede madri possono essere installate con qualsiasi orientamento, quindi non ha davvero alcun significato oggettivo qui. Ho visto gli istruttori scriverlo alla lavagna in entrambi i modi. Ho visto che i libri lo depongono in entrambi i modi. Ho visto che le specifiche lo depongono in entrambi i casi. Dopo oltre 20 anni l'unica cosa che so per certo è che non mi fido.
4) I numeri più grandi salgono sempre. Cosa sei stupido? Proprio come nella grafica, dove crescono da sinistra a destra, dall'alto in basso ... ehi aspetta un secondo ...
Questa domanda dell'intervista è un buon esempio di come questo possa sembrare oggettivo, ma essere arbitrario. Con local1
allocata nel primo frame e local2
allocata nel secondo è il codice di output è:
if(local1 < &local2)
{
printf("\nStack is growing downwards.\n");
}
else
{
printf("\nStack is growing upwards.\n");
}
Eppure nel primo commento insiste che la disuguaglianza sta indicando la strada sbagliata. Il secondo insiste su dropping su / down e si riferisce a indirizzi superiori / inferiori.
Il mio consiglio, se stai scrivendo qualcosa a cui interessa e non puoi evitarlo, determina attentamente le ipotesi popolari e usale coerentemente. Cerca di chiarire le tue ipotesi.
Se stai leggendo qualcosa a cui interessa, indipendentemente dal contesto, non fidarti delle ipotesi finché non sono chiare.
Pila raffigurata con lo 0 ° indirizzo di memoria in alto:
link
Pila raffigurata con lo 0 ° indirizzo di memoria in fondo:
link
Nota come ti danno la possibilità di controllare quali sono le loro ipotesi.
Fa schifo, ma questa ambiguità è ciò che ci è rimasto. Chiunque dica qualcosa di diverso è semplicemente bloccato in un contesto ristretto.
Se vuoi eliminare tutta questa confusione puoi dire eccezioni unwind lo stack.