variable long float dev data memory 64bit int 32-bit 16-bit

memory - long - uint c++



16 bit Int vs 32 bit Int vs 64 bit Int (4)

"Mejor" es un término subjetivo, pero algunos enteros son más eficaces en ciertas plataformas.

Por ejemplo, en una computadora de 32 bits (referenciada por términos como plataforma de 32 bits y Win32) la CPU está optimizada para manejar un valor de 32 bits a la vez, y la 32 se refiere a la cantidad de bits que la CPU puede consumir o producir en un solo ciclo. (Esta es una explicación realmente simplista, pero transmite la idea general).

En una computadora de 64 bits (los procesadores AMD e Intel más recientes se encuentran en esta categoría), la CPU está optimizada para manejar valores de 64 bits a la vez.

Por lo tanto, en una plataforma de 32 bits, un entero de 16 bits cargado en una dirección de 32 bits debería tener 16 bits a cero para que la CPU pueda operar en ella; un entero de 32 bits sería inmediatamente utilizable sin ninguna alteración, y un entero de 64 bits tendría que operarse en dos o más ciclos de CPU (una para los 32 bits bajos y luego nuevamente para los 32 bits altos) .

A la inversa, en una plataforma de 64 bits, los enteros de 16 bits tendrían que tener 48 bits a cero, los enteros de 32 bits tendrían que tener 32 bits a cero, y los enteros de 64 bits podrían operarse de inmediato.

Cada plataforma y CPU tiene un bit ''ness'' nativo (como 32 o 64), y esto generalmente limita algunos de los otros recursos a los que puede acceder esa CPU (por ejemplo, la limitación de memoria de 3GB / 4GB de los procesadores de 32 bits). ). Los procesadores de la familia de procesadores 80386 (y luego los procesadores x86) hicieron que la norma fuera de 32 bits, pero ahora las compañías como AMD y luego Intel están haciendo la norma de 64 bits.

Me he estado preguntando esto durante mucho tiempo ya que nunca he tenido una educación "formal" en informática (estoy en la escuela secundaria), así que disculpe mi ignorancia sobre el tema.

En una plataforma que admite los tres tipos de enteros enumerados en el título, ¿cuál es mejor y por qué? (Sé que cada tipo de int tiene una longitud diferente en la memoria, pero no estoy seguro de qué significa o cómo afecta el rendimiento o, desde el punto de vista del desarrollador, cuál tiene más ventajas sobre el otro).

Gracias de antemano por su ayuda.


Depende de si se debe optimizar la velocidad o el almacenamiento. Si está interesado en la velocidad y está ejecutando SQL Server en modo de 64 bits, entonces lo que necesita son claves de 64 bits. Un procesador de 64 bits que se ejecuta en modo de 64 bits, está optimizado para usar números y direcciones de 64 bits. Del mismo modo, un procesador de 64 bits que se ejecuta en modo de 32 bits está optimizado para utilizar números y direcciones de 32 bits. Por ejemplo, en el modo de 64 bits, todos los empujes y saltos en la pila son de 8 bytes, etc. También se recupera la memoria caché y la memoria para los números de 64 bits y las direcciones. El procesador, que se ejecuta en modo de 64 bits, puede necesitar más ciclos de la máquina para manejar un número de 32 bits, al igual que un procesador, y el funcionamiento en modo de 32 bits necesita más ciclos de la máquina para manejar un número de 16 bits. Los aumentos en el tiempo de procesamiento vienen por muchas razones, pero solo piense en el ejemplo de alineación de la memoria: el número de 32 bits puede no estar alineado en un límite integral de 64 bits, lo que significa que cargar el número requiere cambiar y enmascarar el número después de cargarlo en un registro. Como mínimo, cada número de 32 bits se debe enmascarar antes de cada operación. Estamos hablando de al menos reducir a la mitad la velocidad efectiva del procesador mientras manejamos enteros de 32 o 16 bits en modo de 64 bits.


Para responder a su primera pregunta, el uso de 16 bits frente a 32 bits frente a un entero de 64 bits depende del contexto en el que se utilice. Por lo tanto, realmente no se puede decir que uno es mejor que el otro, por decir. Sin embargo, dependiendo de una situación, es preferible utilizar uno sobre otro. Considera este ejemplo. Digamos que tiene una base de datos con 10 millones de usuarios y desea almacenar el año en que nacieron. Si crea un campo en su base de datos con un entero de 64 bits, habrá agotado 80 megabytes de su almacenamiento; mientras que, si tuviera que usar un campo de 16 bits, solo se usarán 20 megabytes de su almacenamiento. Puede usar un campo de 16 bits aquí porque el año en que nacen las personas es más pequeño que el número más grande de 16 bits. En otras palabras, 1980, 1990, 1991 <65535, asumiendo que su campo no está firmado. En definitiva, depende del contexto. Espero que esto ayude.


Una respuesta simple es usar el más pequeño que SABES será seguro para el rango de valores posibles que contendrá.

Si sabe que los valores posibles están limitados a ser más pequeños que un entero de longitud máxima de 16 bits (por ejemplo, el valor correspondiente a qué día del año es, siempre <= 366), use eso. Si no está seguro (por ejemplo, el ID de registro de una tabla en una base de datos que puede tener cualquier número de filas), utilice Int32 o Int64 según su criterio.

Probablemente, otros le pueden dar una mejor idea de las ventajas de rendimiento dependiendo del lenguaje de programación que esté usando, pero los tipos más pequeños usan menos memoria y, por lo tanto, son "mejores" si no los necesita.

Solo como referencia, un entero de 16 bits significa que hay 2 ^ 16 valores posibles, generalmente representados entre 0 y 65,535. Los valores de 32 bits suben a 2 ^ 32 o apenas sobre 4,29 mil millones de valores.

Esta pregunta En las CPU de 32 bits, ¿es un tipo ''entero'' más eficiente que un tipo ''corto''? Puede agregar más información buena.