que español caracteristicas c++ c byte history computer-architecture

c++ - caracteristicas - mongodb español



Sistema donde 1 byte!=8 bit? (9)

Esta pregunta ya tiene una respuesta aquí:

Todo el tiempo leo frases como

no confíe en que 1 byte tenga un tamaño de 8 bits

utilice CHAR_BIT lugar de 8 como una constante para convertir bits y bytes

etcétera. ¿Qué sistemas de la vida real existen hoy en día, donde esto es cierto? (No estoy seguro de si hay diferencias entre C y C ++ con respecto a esto, o si en realidad es independiente del idioma. Por favor vuelva a etiquetar si es necesario).


A menos que esté escribiendo código que podría ser útil en un DSP, tiene derecho a suponer que los bytes son de 8 bits. Todo el mundo puede no ser un VAX (o un Intel), pero todo el mundo tiene que comunicarse, compartir datos, establecer protocolos comunes, etc. Vivimos en la era de Internet basada en protocolos construidos sobre octetos, y cualquier implementación de C donde los bytes no sean octetos va a ser muy difícil usar esos protocolos.

También vale la pena señalar que tanto POSIX como Windows tienen (y ordenan) bytes de 8 bits. Eso cubre el 100% de las máquinas interesantes no integradas, y en la actualidad una gran parte de los sistemas no integrados con DSP también.


Agregando uno más como referencia, de la entrada de Wikipedia en HP Saturn :

La arquitectura de Saturno está basada en nibble; es decir, la unidad central de datos es de 4 bits, que puede contener un dígito decimal codificado en binario (BCD).


Como programador promedio en plataformas convencionales, no necesita preocuparse demasiado por un byte que no sea de 8 bits. Sin embargo, aún utilizaría la constante CHAR_BIT en mi código y assert (o mejor static_assert ) cualquier ubicación en la que dependa de bytes de 8 bits. Eso debería ponerte en el lado seguro.

(No conozco ninguna plataforma relevante donde no sea verdad).


De la Wikipedia :

El tamaño de un byte se seleccionó al principio para ser un múltiplo de códigos de teletipo existentes, particularmente los códigos de 6 bits usados ​​por el Ejército de EE. UU. (Fieldata) y la Armada. En 1963, para poner fin al uso de códigos de teletipo incompatibles por diferentes ramas del gobierno de los EE. UU., ASCII, un código de 7 bits, fue adoptado como un Estándar Federal de Procesamiento de Información, convirtiendo los bytes de 6 bits en comercialmente obsoletos. A principios de la década de 1960, AT & T introdujo la telefonía digital primero en líneas troncales de larga distancia. Estos usaron la codificación μ-law de 8 bits. Esta gran inversión prometió reducir los costos de transmisión para datos de 8 bits. El uso de códigos de 8 bits para telefonía digital también provocó que se adoptaran "octetos" de datos de 8 bits como la unidad de datos básica de la Internet temprana.


En la historia, existe una gran cantidad de arquitecturas raras que no usaban tamaños de palabras nativas que eran múltiplos de 8. Si alguna vez te encuentras con alguno de estos, házmelo saber.

  • La primera CPU comercial de Intel fue Intel 4004 (4 bits)
  • PDP-8 (12 bits)

El tamaño del byte ha sido históricamente dependiente del hardware y no existen estándares definitivos que exijan el tamaño.

Puede ser algo bueno a tener en cuenta si haces muchas cosas incrustadas.


En las máquinas más antiguas, los códigos de menos de 8 bits eran bastante comunes, pero la mayoría de ellos han estado muertos y desaparecidos desde hace años.

C y C ++ han exigido un mínimo de 8 bits para char , al menos tan atrás como el estándar C89. [Editar: Por ejemplo, C90, §5.2.4.2.1 requiere CHAR_BIT > = 8 y UCHAR_MAX > = 255. C89 usa un número de sección diferente ( creo que sería §2.2.4.2.1) pero contenido idéntico]. Tratan "char" y "byte" como sinónimos [Edit: por ejemplo, CHAR_BIT se describe como: "número de bits para el objeto más pequeño que no es bitfield (byte)".]

Sin embargo, hay máquinas actuales (en su mayoría DSP) donde el tipo más pequeño es más grande que 8 bits: un mínimo de 12, 14 o incluso 16 bits es bastante común. Windows CE hace más o menos lo mismo: su tipo más pequeño (al menos con el compilador de Microsoft) es de 16 bits. Sin embargo, no tratan a un char como 16 bits, sino que adoptan el enfoque (no conforme) de simplemente no admitir un tipo llamado char .


En primer lugar, el número de bits en char no depende formalmente del "sistema" o de la "máquina", aunque esta dependencia suele estar implícita en el sentido común. La cantidad de bits en char depende solo de la implementación (es decir, en el compilador). No hay ningún problema para implementar un compilador que tenga más de 8 bits en caracteres para cualquier sistema o máquina "ordinaria".

En segundo lugar, hay varias plataformas integradas donde sizeof(char) == sizeof(short) == sizeof(int) , cada una con 16 bits (no recuerdo los nombres exactos de estas plataformas). Además, las famosas máquinas Cray tenían propiedades similares con todos estos tipos con 32 bits.


HOY, en el mundo de C ++ en procesadores x86, es bastante seguro confiar en que un byte sea de 8 bits. Los procesadores donde el tamaño de palabra no es un poder de 2 (8, 16, 32, 64) son muy poco comunes .

NO SIEMPRE FUE ASÍ.

El Procesador Central de Control Data 6600 (y sus hermanos) usó una palabra de 60 bits, y solo podía abordar una palabra a la vez. En un sentido, un "byte" en un CDC 6600 era de 60 bits.

El hardware del puntero de bytes DEC-10 funcionaba con bytes de tamaño arbitrario. El puntero de bytes incluye el tamaño del byte en bits. No recuerdo si los bytes podían abarcar los límites de las palabras; Creo que no pudieron, lo que significaba que tendrías unos pocos bits de desecho por palabra si el tamaño del byte no fuera de 3, 4, 9 o 18 bits. (El DEC-10 usó una palabra de 36 bits).


Hago un montón de incrustado y actualmente estoy trabajando en el código DSP con CHAR_BIT de 16