Se si confronta la memoria di uno string
e uno char[]
, sono abbastanza simili. Sono entrambi allocati nell'heap (eccetto stringhe letterali che vengono create in fase di compilazione). Entrambi contengono alcune variabili (per la lunghezza e così via) e un'area di memoria contenente un array di caratteri.
Tuttavia, a seconda di come è stato creato il string
, l'area di memoria potrebbe essere più grande della lunghezza richiesta, ovvero ha alcuni byte inutilizzati alla fine dell'area di memoria. L'area di memoria di un char[]
è sempre esattamente grande quanto richiesto dai dati.
Se ad esempio si utilizza StringBuilder per creare una stringa e la capacità è maggiore della sua lunghezza (ma non più di due volte), restituisce un oggetto string
che contiene byte non utilizzati alla fine.
Esempio:
// set capacity to 8
StringBuilder s = new StringBuilder(8);
// put four characters in it
s.Append("Ouch");
// get the string
string result = s.ToString();
La variabile result
ora punta a un oggetto stringa che ha un'area di memoria per i dati di caratteri che è di 16 byte, ma solo il primo 10 vengono utilizzati (quattro caratteri, più un carattere \x0
alla fine).
Questa sembra una domanda a casa, ma nel caso non lo sia ... Se si deve scegliere tra stringa o char [] per risparmiare memoria, probabilmente non si dovrebbe programmare in C#. Dico questo perché la quantità di memoria utilizzata è più o meno un lavaggio perché un personaggio memorizzato in una stringa ha le stesse dimensioni di un archivio di caratteri in un carattere. – Tony
Perché è importante? A meno che tu non abbia un milione di parole, non importa ... –