Pregunta

Exactamente eso: ¿La longitud de las cadenas es igual al tamaño del byte? ¿Importa en el idioma?

Creo que lo es, pero solo quiero asegurarme.

Información adicional: Me estoy preguntando en general. Mi situación específica fue PHP con MySQL.

Como la respuesta es no, eso es todo lo que necesito saber.

¿Fue útil?

Solución

No. Una cadena terminada en cero tiene un byte extra. Una cadena de pascal (el shortstring de Delphi) tiene un byte adicional para la longitud. Y las cadenas Unicode tienen más de un byte por carácter.

Por Unicode depende de la codificación. Podría ser de 2 o 4 bytes por carácter o incluso una mezcla de 1,2 y 4 bytes.

Otros consejos

Depende completamente de la plataforma y la representación.

Por ejemplo, en .NET una cadena toma dos bytes en la memoria por cada punto de código UTF-16. Sin embargo, los pares sustitutos requieren dos valores UTF-16 para un carácter Unicode completo en el rango U + 100000 a U + 10FFFF. La forma en memoria también tiene una sobrecarga para la longitud de la cadena y posiblemente algún relleno, así como la sobrecarga normal del objeto de un puntero de tipo, etc.

Ahora, cuando escribe una cadena en el disco (o en la red, etc.) desde .NET, especifica la codificación (con la mayoría de las clases por defecto en UTF-8). En ese punto, el tamaño depende mucho de la codificación. ASCII siempre toma un solo byte por carácter, pero es muy limitado (sin acentos, etc.); UTF-8 proporciona el rango completo de Unicode con una codificación variable (todos los caracteres ASCII se representan en un solo byte, pero otros ocupan más). UTF-32 siempre usa exactamente 4 bytes para cualquier carácter Unicode; la lista continúa.

Como puedes ver, no es un tema simple. Para calcular la cantidad de espacio que ocupará una cadena, deberá especificar exactamente cuál es la situación: si se trata de un objeto en memoria en alguna plataforma (y si es así, qué plataforma, potencialmente incluso en la implementación y la configuración del sistema operativo), o si se trata de una forma codificada sin formato, como un archivo de texto, y si es así, qué codificación se usa.

Depende de lo que quieras decir por " longitud " ;. Si te refieres a " número de caracteres " entonces, no, muchos idiomas / métodos de codificación utilizan más de un byte por carácter.

No siempre, depende de la codificación.

No hay una respuesta única; depende de la implementación del lenguaje y (¡recuerda que algunos lenguajes tienen implementaciones múltiples!)

Las cadenas ASCII terminadas en cero ocupan al menos un byte más que el " contenido " de la cuerda. (Se puede asignar más, dependiendo de cómo se creó la cadena).

Las cadenas que no terminan en cero usan un descriptor (o estructura similar) para registrar la longitud, lo que lleva memoria extra a alguna parte .

Las cadenas Unicode (en varios idiomas) usan dos bytes por carácter.

Las cadenas en un almacén de objetos pueden ser referenciadas a través de manejadores, que agregan una capa de direccionamiento indirecto (y más datos) para simplificar la administración de la memoria.

Estás en lo correcto. Si codifica como ASCII, hay un byte por carácter. De lo contrario, es uno o más bytes por carácter.

En particular, es importante saber cómo afecta esto a las operaciones de subcadena. Si no tiene un byte por carácter, ¿s [n] obtiene el nth byte o nth char? Obtener la nth char será ineficiente para n grande en lugar de constante, ya que es con un byte por carácter.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top