string - multiplos - ¿La longitud de una cuerda es igual al tamaño del byte?
que es un kb (6)
Depende completamente de la plataforma y la representación.
Por ejemplo, en .NET una cadena toma dos bytes en memoria por punto de código UTF-16. Sin embargo, los pares suplentes requieren dos valores UTF-16 para un carácter Unicode completo en el rango de U + 100000 a U + 10FFFF. La forma en memoria también tiene una sobrecarga para la longitud de la cadena y posiblemente algo de relleno, así como la sobrecarga de objetos normales de un puntero de tipo, etc.
Ahora, cuando escribe una cadena en el disco (o la red, etc.) de .NET, especifica la codificación (con la mayoría de las clases predeterminadas 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 Unicode completo 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 puede ver, no es un tema simple. Para calcular cuánto espacio va a ocupar una cadena, deberá especificar exactamente cuál es la situación: si se trata de un objeto en la memoria en alguna plataforma (y, en caso afirmativo, qué plataforma), posiblemente incluso hasta la implementación y el funcionamiento. configuración del sistema), o si se trata de un formulario codificado en bruto, como un archivo de texto, y si es así, con qué codificación.
Exactamente eso: ¿la longitud de una cuerda es igual al tamaño del byte? ¿Importa en el idioma?
Creo que sí, pero solo quiero asegurarme.
Información adicional: me pregunto en general. Mi situación específica era PHP con MySQL.
Como la respuesta es no, eso es todo lo que necesito saber.
Depende de lo que quieras decir con "longitud". Si se refiere a "número de caracteres", entonces, no, muchos idiomas / métodos de codificación utilizan más de un byte por carácter.
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 funciona esto en las operaciones de subcadenas. Si no tiene un byte por carácter, ¿s [n] obtiene el n-ésimo byte o el n-ésimo carácter? Obtener el enésimo carácter será ineficaz para n grande en lugar de constante, como ocurre con un byte por carácter.
No hay una sola respuesta; depende del lenguaje y la implementación (¡recuerde que algunos idiomas tienen múltiples implementaciones!)
Las cadenas ASCII terminadas en cero ocupan al menos un byte más que el "contenido" de la cadena. (Se pueden asignar más, dependiendo de cómo se creó la cadena).
Las cadenas no terminadas en cero usan un descriptor (o estructura similar) para registrar la longitud, lo que requiere memoria adicional en alguna parte .
Las cadenas Unicode (en varios idiomas) usan dos bytes por char.
Las cadenas en un almacén de objetos se pueden referenciar a través de identificadores, lo que agrega una capa de direccionamiento indirecto (y más datos) para simplificar la administración de la memoria.
No siempre, depende de la codificación.
Nop. Una cadena terminada en cero tiene un byte extra. Una cadena pascal (Delphi shortstring) tiene un byte extra 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.