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,
intse establece en el ''tamaño natural'', la forma entera que el hardware maneja de manera más eficiente - Cuando se usa
shorten una matriz o en operaciones aritméticas, el enteroshortse convierte enint, por lo que esto puede introducir un impacto en la velocidad al procesar enterosshort - El uso
shortpuede 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
int32 bits en comparación con un sistemaint16 bits
Conclusión:
- Use
intmenos 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
intoshort, que puede variar según la plataforma (como quiera que sea una plataforma con unshort32 bits para poder leer un archivo escrito en un plataforma con unshort16 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
shorten su plataforma de destino (para unshort16 bits, esto es-32768-32767, o0-65535para un 16- bitunsigned short). - Su plataforma de destino (o una de sus plataformas de destino) usa menos memoria por
shortque por unint. El estándar solo garantiza que elshortno es más grande queint, por lo que las implementaciones pueden tener el mismo tamaño para unshorty 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.