c++ - long - ¿Cuándo usar `short` sobre` int`?
unsigned short (4)
(Vea la respuesta de Eric para una explicación más detallada)
Notas:
- En general,
int
se establece en el ''tamaño natural'', la forma entera que el hardware maneja de manera más eficiente - Cuando se usa
short
en una matriz o en operaciones aritméticas, el enteroshort
se convierte enint
, por lo que esto puede introducir un impacto en la velocidad al procesar enterosshort
- El uso
short
puede conservar la memoria si es más angosto queint
, lo que puede ser importante cuando se usa una matriz grande - Su programa utilizará más memoria en un sistema
int
32 bits en comparación con un sistemaint
16 bits
Conclusión:
- Use
int
menos que la conservación de la memoria sea crítica, o su programa use mucha memoria (por ejemplo, muchos arreglos). En ese caso, useshort
.
Hay muchas preguntas que preguntan por la diferencia entre los tipos de entero short
e int
en C ++, pero en la práctica, ¿cuándo se elige short
sobre int
?
En general, no prefieres short
sobre int
.
El tipo int es el tamaño de palabra nativo del procesador
Por lo general, un int
es el tamaño de palabra del procesador.
Por ejemplo, con un procesador de tamaño de palabra de 32 bits, un int
sería de 32 bits. El procesador es más eficiente usando 32 bits. Suponiendo que el short
es de 16 bits, el procesador todavía obtiene 32 bits de la memoria. Así que no hay eficiencia aquí; en realidad es más largo porque el procesador puede tener que desplazar los bits para colocarlos en la posición correcta en una palabra de 32 bits.
Elección de un tipo de datos más pequeño Hay tipos de datos estandarizados que tienen una longitud de bits específica, como uint16_t
. Estos son preferidos a los tipos ambiguos de char, short,
e int
. Estos tipos de datos específicos de ancho se usan generalmente para acceder al hardware o comprimir el espacio (como los protocolos de mensajes).
Escogiendo un rango menor
El tipo de datos short
se basa en el rango, no en el ancho de bits. En un sistema de 32 bits, tanto short
como int
pueden tener la misma longitud de 32 bits.
Una vez que la razón para usar short
es porque el valor nunca pasará de un rango dado. Esto suele ser una falacia porque los programas cambiarán y el tipo de datos podría desbordarse.
Resumen
En la actualidad, no uso más short
. Utilizo uint16_t
cuando uint16_t
dispositivos de hardware de 16 bits. Utilizo unsigned int
para cantidades, incluidos los índices de bucle. Yo uso uint8_t
, uint16_t
y uint32_t
cuando el tamaño importa para el almacenamiento de datos. El tipo de datos short
es ambiguo para el almacenamiento de datos, ya que es un mínimo. Con la llegada de los archivos de encabezado stdint
, ya no hay necesidad de short
.
Si no tiene ninguna restricción específica impuesta por su arquitectura, yo diría que siempre puede usar int
. El tipo short
está destinado a sistemas específicos donde la memoria es un recurso precioso.
Usted elige short
sobre int
cuando:
Ya sea
- Desea reducir la huella de memoria de los valores que está almacenando (por ejemplo, si está apuntando a una plataforma de poca memoria),
- Desea aumentar el rendimiento aumentando el número de valores que se pueden empaquetar en una sola página de memoria (reduciendo las fallas de la página al acceder a sus valores) y / o en las cachés de memoria (reduciendo las fallas de caché cuando se accede a los valores), y el perfil ha revelado que hay mejoras de rendimiento que se tienen aquí,
- O está enviando datos a través de una red o almacenándolos en un disco, y desea disminuir su huella (para ocupar menos espacio en disco o ancho de banda de red). Aunque para estos casos, debería preferir tipos que especifiquen exactamente el tamaño en bits en lugar de
int
oshort
, que puede variar según la plataforma (como quiera que sea una plataforma con unshort
32 bits para poder leer un archivo escrito en un plataforma con unshort
16 bits). Los buenos candidatos son los tipos definidos en stdint.h .
Y:
- Tiene un valor numérico que no necesita tomar ningún valor que no pueda almacenarse en un
short
en su plataforma de destino (para unshort
16 bits, esto es-32768
-32767
, o0
-65535
para un 16- bitunsigned short
). - Su plataforma de destino (o una de sus plataformas de destino) usa menos memoria por
short
que por unint
. El estándar solo garantiza que elshort
no es más grande queint
, por lo que las implementaciones pueden tener el mismo tamaño para unshort
y para unint
.
Nota:
char
también se pueden utilizar como tipos aritméticos. Una respuesta a "¿Cuándo debo usar char
lugar de short
o int
?" se leería de forma muy similar a esta, pero con números diferentes ( -128
- 127
para un carácter de 8 bits, 0
- 255
para un unsigned char
8 bits)
En realidad, es probable que no desee utilizar el tipo short
específicamente. Si desea un número entero de tamaño específico, hay tipos definidos en <cstdint>
que deberían ser preferidos, ya que, por ejemplo, un int16_t
tendrá 16 bits en cada sistema, mientras que no puede garantizar que el tamaño de un short
sea el mismo En todos los objetivos se compilará su código.