Contrariamente a ciò che chiunque direbbe, sapere come funziona la memoria è importante sapere per qualsiasi lingua, indipendentemente dal fatto che una lingua specifica richieda di conoscerla. Per linguaggi di basso livello come C, gli indirizzi di memoria sono molto importanti da sapere perché dedicare spazio agli array o alle strutture di dati complesse richiede un atto fisico di chiedere al sistema operativo uno spazio di memoria della dimensione appropriata e tu, il programmatore, devi essere in grado di sapere quanti byte sono necessari C offre metodi utili a questo riguardo come sizeof, ma non pretende di nasconderlo da te.
Solo recentemente C ++ ha spostato verso la rimozione della responsabilità per i programmatori di liberare la memoria allocata avendo puntatori intelligenti. C # e Java sono abbastanza bravi a nasconderlo, ma sono ancora lì. Ad esempio in Java, se confronti due oggetti con ==
, stai confrontando i loro puntatori. Potresti non conoscere i valori del puntatore, ma devi capire che se due oggetti restituiscono true utilizzando l'operatore ==
, condividono lo stesso spazio in memoria. Se non hai capito questo concetto, potresti fare cose come confrontare le stringhe con ==
, che potrebbe darti quello che ti aspetti, ma forse no. Poiché "mickey mouse" == "mickey mouse"
può o non può condividere lo stesso indirizzo di memoria a seconda di come è implementato nella macchina virtuale, i programmatori Java non dovrebbero mai eseguire tali controlli usando ==
, ma piuttosto con .equals()
, a meno che, naturalmente, non verifichi effettivamente condividono la stessa memoria è ciò che vuoi.
Ovviamente questo è solo un esempio. Con l'aumento della memoria e i progressi della tecnologia, la gestione della memoria diventerà meno importante con il tempo. Tuttavia ti assicuro che l'unico giorno in cui il tuo programma sta consumando più memoria possibile e il tuo capo ti sta controllando per sistemarlo, la modalità di gestione della memoria diventa molto rilevante molto velocemente. :)