Pregunta

Me he estado preguntando esto durante mucho tiempo desde que nunca tuve 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 todo tipo de int tiene una longitud diferente en la memoria, pero no estoy seguro de lo que eso significa o cómo afecta el rendimiento o, desde el punto de vista de un desarrollador, cuáles tienen más ventajas sobre la otra).

Gracias de antemano por su ayuda.

¿Fue útil?

Solución

"Better" es un término subjetivo, pero algunos enteros son más desempeñados en ciertas plataformas.

Por ejemplo, en una computadora de 32 bits (referenciada por términos como la plataforma de 32 bits y Win32), la CPU está optimizada para manejar un valor de 32 bits a la vez, y el 32 se refiere al número 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 entran en esta categoría), la CPU está optimizada para manejar los 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 necesitaría tener 16 bits a cero para que la CPU pueda operar en ella; Un entero de 32 bits se usaría inmediatamente sin ninguna alteración, y un entero de 64 bits necesitaría ser operado en dos o más ciclos de CPU (una vez para los bajos 32 bits, y luego nuevamente para los altos 32 bits) .

Por el contrario, en una plataforma de 64 bits, los enteros de 16 bits necesitarían tener 48 bits a cero, los enteros de 32 bits necesitarían tener 32 bits a cero y se podrían operar enteros de 64 bits de inmediato.

Cada plataforma y CPU tiene una bits 'nativa' (como 32 o 64), y esto generalmente limita algunos de los otros recursos a los que se puede acceder por esa CPU (por ejemplo, la limitación de memoria de 3GB/4GB de los procesadores de 32 bits de 32 bits ). Los procesadores de la familia del procesador 80386 (y posterior X86) hicieron de 32 bits la norma, pero ahora compañías como AMD y luego Intel actualmente están haciendo de 64 bits la norma.

Otros consejos

Para responder a su primera pregunta, el uso de un entero de 16 bits frente a 32 bits a un número entero de 64 bits depende del contexto que se use. Por lo tanto, realmente no puedes decir que uno es mejor sobre el otro, por decir. Sin embargo, dependiendo de una situación, es preferible usar una sobre otra. Considere este ejemplo. Supongamos 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, entonces ha agotado 80 megabytes de su almacenamiento; Mientras que, si usara un campo de 16 bits, solo se utilizarán 20 megabytes de su almacenamiento. Puede usar un campo de 16 bits aquí porque el año en que nacen la gente es más pequeño que el número de 16 bits más grande. En otras palabras, 1980, 1990, 1991 <65535, suponiendo que su campo no esté firmado. En general, depende del contexto. Espero que esto ayude.

Una respuesta simple es usar la más pequeña que conozca que será segura para el rango de valores posibles que contendrá.

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

Otros probablemente pueden darle una mejor sensación de las ventajas de rendimiento dependiendo de qué lenguaje de programación esté utilizando, pero los tipos más pequeños usan menos memoria y, por lo tanto, son "mejores" de usar si no necesita más.

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 poco más de 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 más buena.

Depende de si la velocidad o el almacenamiento deben optimizarse. Si está interesado en la velocidad y está ejecutando SQL Server en modo de 64 bits, entonces las teclas de 64 bits son lo que necesita. 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 usar números y direcciones de 32 bits. Por ejemplo, en el modo de 64 bits, todos los empujes y estallidos en la pila son 8 bytes, etc. También la búsqueda de caché y la memoria nuevamente se optimizan nuevamente para números y direcciones de 64 bits. El procesador, que se ejecuta en modo de 64 bits, puede necesitar más ciclos de máquina para manejar un número de 32 bits como un procesador, que se ejecuta en modo de 32 bits necesita más ciclos de máquina para manejar un número de 16 bits. Los aumentos en el tiempo de procesamiento se producen 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 cargar el número requiere cambiar y enmascarar el número después de cargarlo en un Registrarse. Por lo menos, cada número de 32 bits debe estar enmascarado antes de cada operación. Estamos hablando al menos a la mitad de la velocidad efectiva del procesador mientras manejamos enteros de 32 o 16 bits en modo de 64 bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top