voglio undesrtand ciò che è memorizzato nello stack/heap in rapida. Ho una stima rought: Tutto ciò che si stampa e l'indirizzo di memoria sembra non i valori, quelli vengono memorizzati nello stack, e ciò che viene stampato come valori, quelli sono sul mucchio, in fondo in base alle tipi di valore e di riferimento. Ho completamente torto? E facoltativamente, potresti fornire una rappresentazione visiva dello stack/heap?pila Swift/mucchio comprensione
risposta
Classes (tipi di riferimento) sono allocati nel mucchio, tipi di valore (come Struct, String, Int, Bool, ecc) vivono nella pila. Vedere questo argomento per risposte più dettagliate: Why Choose Struct Over Class?
come Juul ha dichiarato tipi di riferimento sono memorizzati in Heap e valori in pila ...
qui voglio dare la spiegazione del perché ...
Pila e un mucchio?
Lo stack viene utilizzato per l'allocazione della memoria statica e l'heap per l'allocazione dinamica della memoria, entrambi memorizzati nella RAM del computer.
Le variabili allocate nello stack vengono memorizzate direttamente nella memoria e l'accesso a questa memoria è molto veloce e l'allocazione viene gestita al momento della compilazione del programma. Quando una funzione o un metodo chiama un'altra funzione che a sua volta chiama un'altra funzione, ecc, l'esecuzione di tutte quelle funzioni rimane sospeso fino all'ultimo funzione restituisce il valore. Lo stack è sempre riservato in un ordine LIFO, il blocco più recentemente riservato è sempre il blocco successivo di essere liberato. Questo rende molto semplice per tenere traccia dello stack, liberando un isolato dallo stack non è altro che regolare un puntatore.
Variabili allocati sul mucchio hanno loro memoria allocata in fase di esecuzione e l'accesso a questa memoria è un po 'più lento, ma la dimensione heap è limitata solo dalla dimensione della memoria virtuale. Gli elementi dell'heap non hanno dipendenze tra loro e possono sempre essere consultati casualmente in qualsiasi momento. È possibile allocare un blocco in qualsiasi momento e liberarlo in qualsiasi momento. Ciò rende molto più complesso tenere traccia di quali parti dell'heap sono allocate o libere in un dato momento.
Questa presentazione spiega un po 'dell'uso di heap e stack da parte di Swift: https://realm.io/news/andy-matuschak-controlling-complexity/. In breve, non puoi fare supposizioni se un valore o un riferimento finiranno nell'heap o nello stack, come puoi in C. –
Sorpreso che nessuno ha ancora risposto, è una specie di linguaggio segreto conosciuto solo dopo di te paga qualcosa alla mela ?? – Ahmed