何时使用`short` over`int`?

时间:2014-06-23 16:41:59

标签: c++ int short

有许多问题要求C ++中的shortint整数类型之间存在差异,但实际上,您何时选择short而不是int

4 个答案:

答案 0 :(得分:35)

(有关详细说明,请参阅Eric's answer

备注:

  • 通常,int设置为'自然大小' - 硬件最有效处理的整数形式
  • 在数组或算术运算中使用short时,short整数将转换为int,因此这会对处理short的速度产生影响}整数
  • 使用short可以节省内存,如果它比int更窄,这在使用大型数组时很重要
  • 与16位int系统相比,您的程序将在32位int系统中使用更多内存

<强>结论:

  • 使用int除非您节省内存至关重要,否则您的程序会占用大量内存(例如许多阵列)。在这种情况下,请使用short

答案 1 :(得分:16)

在以下情况下选择short而不是int

无论

  • 您希望减少所存储值的内存占用量(例如,如果您的目标是低内存平台),
  • 您希望通过增加可以打包到单个内存页面中的值的数量(减少访问值时的页面错误)和/或内存缓存(减少访问值时的缓存未命中)来提高性能,以及分析显示,这里有性能提升,
  • 或者您通过网络发送数据或将数据存储到磁盘,并希望减少占用空间(占用更少的磁盘空间或网络带宽)。虽然对于这些情况,您应该更喜欢以比特而不是intshort精确指定大小的类型,这些类型可能因平台而异(因为您需要具有32位{{1的平台能够读取使用16位short)在平台上编写的文件。好的候选人是stdint.h中定义的类型。

  • 您有一个数值,不需要在目标平台上的short中存储任何无法存储的值(对于16位short,这是{{ 1}} - short-32768 - 32767代表16位0)。
  • 您的目标平台(或其中一个目标平台)使用65535的内存少于unsigned short的内存。该标准仅保证short 不大于而不是int,因此允许实现short和{{1}的大小相同}。

注意:

int也可以用作算术类型。回答“我应该何时使用short代替intchar?”,其阅读方式与此类似,但数字不同({{ 1}} - char代表8位shortint - -128代表8位127

实际上,您可能实际上并不想特别使用char类型。如果你想要一个特定大小的整数,那么应该首选defined in <cstdint>类型,例如,0在每个系统上都是16位,而你不能保证{的大小{ {1}}将为您的代码编译的所有目标提供相同的内容。

答案 2 :(得分:7)

一般情况下,您不希望short超过int

int类型是处理器的原生单词大小
通常,int是处理程序的字大小。

例如,对于32位字长处理器,int将为32位。处理器使用32位最有效。假设short是16位,处理器仍然从内存中取出32位。所以没有效率;实际上它更长,因为处理器可能必须将位移位到32位字中的正确位置。

选择较小的数据类型 标准化数据类型的长度特定于位,例如uint16_t。这些不同于char, short,int的模糊类型。这些特定于宽度的数据类型通常用于访问硬件或压缩空间(例如消息协议)。

选择较小的范围
short数据类型基于范围而非位宽。在32位系统上,shortint可能具有相同的32位长度。

使用short的原因之一是因为该值永远不会超过给定范围。这通常是一个谬论,因为程序会改变,数据类型可能会溢出。

<强>摘要
目前,我不再使用short了。当我访问16位硬件设备时,我使用uint16_t。我使用unsigned int作为数量,包括循环索引。当大小对数据存储很重要时,我会使用uint8_tuint16_tuint32_tshort数据类型对于数据存储是不明确的,因为它是最小的。随着stdint标头文件的出现,不再需要short

答案 3 :(得分:0)

如果您的架构没有任何特定限制,我会说您可以随时使用int。类型short适用于内存是宝贵资源的特定系统。