Si compara el almacenamiento de memoria de string
y char[]
, son bastante similares. Ambos están asignados en el montón (excepto cadenas literales que se crean en tiempo de compilación). Ambos contienen algunas variables (para la longitud y tal), y un área de memoria que contiene una matriz de caracteres.
Sin embargo, dependiendo de cómo se cree el string
, su área de memoria puede ser mayor de lo que su longitud requiere, es decir, tiene algunos bytes no utilizados al final del área de memoria. El área de memoria de char[]
siempre es exactamente tan grande como lo requieren los datos.
Si, por ejemplo, utiliza un StringBuilder para crear una cadena, y la capacidad es mayor que su longitud (pero no más de dos), devuelve un objeto string
que contiene bytes no utilizados al final.
Ejemplo:
// 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 variable result
ahora apunta a un objeto de cadena que tiene un área de memoria para los datos de caracteres que es de 16 bytes de largo, pero sólo se usan los primeros 10 (los cuatro caracteres, además de un carácter \x0
al final).
Esto suena como una pregunta de tarea pero por si acaso no ... Si tiene que elegir entre cadena o char [] para guardar memoria, probablemente no deba programar en C#. Digo esto porque la cantidad de memoria utilizada es más o menos un lavado porque un personaje almacenado en una cadena es del mismo tamaño que una tienda de caracteres en un char. – Tony
¿Por qué es importante? A menos que tengas un millón de palabras, realmente no importa ... –