La memoria de la computadora está organizada en "palabras", una secuencia de bytes de un tamaño dado (a menudo una potencia de 2). Por lo general, la memoria se lee y escribe en estas unidades, que a menudo son compatibles con el tamaño de los registros y el soporte nativo de la CPU para operadores aritméticos. Esta suele ser la fuente de la "calificación de bits" de una máquina (por ejemplo, una CPU de 32 bits, una CPU de 64 bits, las antiguas consolas de videojuegos de 8 bits).
Por supuesto, a menudo necesita un tamaño diferente del tamaño de la palabra nativa. Las instrucciones de la máquina y la codificación inteligente le permiten dividir estas palabras en unidades más pequeñas al aplicar varios operadores lógicos de nivel de bit, o combinarlos en unidades más grandes "combinando" varias palabras.
Por ejemplo, si tiene una palabra de 32 bits, podría Y una palabra contra un patrón como 0xff0000ff para obtener el primer y último byte en esa palabra, o 0x0000ffff para obtener solo el contenido del segundo int de 16 bits .
En el caso de los bools, es común usar la memoria como un mapa de bits. En esencia, puede colocar X "bools" en una palabra de X bits y acceder a un bit específico mediante ANDing u ORing contra una "máscara" que se refiere a ese bool. Por ejemplo, 1 para el primer bit, 2 para el segundo bit, 4 para el cuarto bit, etc.
En la mayoría de las máquinas, no es aconsejable dividir un tipo de datos más pequeño en dos palabras (esto se llama alighment).
Cuando trabajas con un lenguaje de nivel superior como C o C++, por lo general no tienes que preocuparte por todo este asunto de la organización de la memoria. Si asigna un int, un short y un double, el compilador generará el código de máquina apropiado. Solo hace esto directamente cuando desea organizar inteligentemente cosas en la memoria asignada dinámicamente, por ejemplo cuando se implementa manualmente un mapa de bits.
Al trabajar con unidades más grandes que el tamaño de palabra nativa, el compilador volverá a manejar la mayoría de las cosas por usted. Por ejemplo, en una máquina de 32 bits puede manejar fácilmente operaciones int de 32 bits, pero para ejecutar el mismo código en una máquina de 8 bits o una máquina de 16 bits, el compilador generará código para hacer las operaciones más pequeñas y combinarlas para obtener los resultadosEsto es parcialmente por lo que generalmente se considera aconsejable ejecutar un sistema operativo de 64 bits en una máquina de 64 bits, ya que de lo contrario podría estar realizando múltiples instrucciones y lecturas/escrituras para simular 64 bits en un sistema operativo de 32 bits en lugar de una sola instrucción o acceso a la memoria.
Para las personas que responden con No me tiene que importar, hay mucho espacio: Gracias, lo sé, pero tengo curiosidad :) – tstbu
No está manejado por RAM, el procesador lee fragmentos de , típicamente, 16 bytes a la vez en el caché. Un multiplexor grande baraja los bytes correctos desde allí a un registro de CPU. Mezclar un byte toma el mismo tiempo que un int. –
¿Alguna vez resolvió esto con éxito? ¿Aún necesitas ayuda con esto? – jcolebrand