top of page

SÍGUEME:

  • Facebook Clean Grey
  • Twitter Clean Grey
  • Instagram Clean Grey

•Cadenas terminadas en nulo•

La longitud del prefijo (ej. Pascal) cadenas que existían antes de la C

  • Longitud de prefijo cadenas de hacer varios algoritmos más rápido, permitiendo que la constante de tiempo de longitud de búsqueda.

  • Longitud de prefijo cadenas de hacer más difícil a causa de errores de saturación de búfer.

  • Incluso en un equipo de 32 bits, si usted permite que la cadena sea el tamaño de la memoria disponible, a una longitud de prefijo de la cadena es de sólo tres bytes más amplia que una cadena terminada en null. En computadoras de 16 bits se trata de un único byte. En máquinas de 64 bits, 4 GB es razonable longitud de la cadena de límite, pero aún si se quiere ampliar al tamaño de la máquina palabra, de 64 bits máquinas suelen tener gran cantidad de memoria haciendo que el extra de siete bytes especie de argumento null. Sé el original de C estándar fue escrito para locamente máquinas pobres (en términos de memoria), pero la eficiencia argumento no me venda aquí.

  • Casi todos los otros idiomas (es decir. Perl, Pascal, Python, Java, C#, etc) el uso de la longitud de prefijo cadenas. Estos lenguajes suelen batir C en la cadena de manipulación de puntos de referencia debido a que son más eficientes con cadenas.

  • C++ rectificado un poco con el std::basic_string de la plantilla, claro, pero matrices de caracteres esperando terminada en nulo cadenas son todavía dominantes. Esto también es imperfecto porque requiere de la asignación del montón.

  • Terminada en Null de las cadenas de la reserva de un personaje (es decir, null), que no puede existir en la cadena, mientras que la longitud del prefijo cadenas pueden contener nulos incrustados.

Varias de estas cosas han salido a la luz, más recientemente, de C, por lo que tendría sentido para C a no haber sabido de ellos. Sin embargo, varias fueron llanura bien antes de C llegó a ser. ¿Por qué terminada en nulo cadenas de haber sido elegido en lugar de el obviamente superior de la longitud de prefijo? EDIT: Ya que algunos pidieron hechos (y no como los que ya siempre) en mi punto de eficiencia anteriormente, provienen de un par de cosas:

  • Concat el uso de null terminado las cadenas se requiere O(n + m) tiempo de complejidad. Longitud de prefijo a menudo requieren sólo de O(m).

  • Longitud terminado en null strings requiere O(n) tiempo de complejidad. Longitud de prefijo es O(1).

  • Longitud y concat son, por mucho, la más común de las operaciones de cadena. Hay varios casos donde terminadas en nulo, las cadenas pueden ser más eficiente, pero estos ocurren con mucho menos frecuencia.

A partir de las respuestas a continuación, estos son algunos casos donde terminadas en nulo, las cadenas son más eficientes:

  • Cuando usted necesita para cortar el inicio de una cadena y de la necesidad de pasar a algún método. Realmente no se puede hacer esto en tiempo constante con la longitud de prefijo, incluso si se les permite destruir la cadena original, debido a que la longitud de prefijo probablemente necesita para seguir la alineación de las reglas.

  • En algunos casos en los que acaba de recorrer la cadena de caracteres mediante caracteres que usted podría ser capaz de guardar un registro de CPU. Tenga en cuenta que esto sólo funciona en el caso de que no se han asignado dinámicamente la cadena (Porque entonces tendrías que liberarlo, lo que exige que el uso de CPU registrar guardó para mantener el puntero que originalmente obtuvo de malloc y amigos).


bottom of page