在C ++中使用'short'

时间:2009-12-05 07:30:40

标签: c++

为什么对于任何数字输入我们更喜欢int而不是short,即使输入的整数非常少。

short的大小在我的x86上是2个字节,int是4个字节,不应该比int更好更快地分配吗?

或者我说错了没用?

5 个答案:

答案 0 :(得分:18)

处理“原生”整数时,CPU通常最快。因此,即使short可能小于intint可能更接近CPU中寄存器的本机大小,因此可能是最有效的两个。

在典型的32位CPU架构中,要加载32位值,需要一个总线周期来加载所有位。加载一个16位值需要一个总线周期来加载这些位, plus 将其中的一半丢弃(此操作可能仍然在一个总线周期内发生)。

答案 1 :(得分:12)

如果你在内存中保留这么多(例如在一个大型数组中),那么16位短路是有意义的,即大小减少50%会使内存明显减少高架。正如Greg正确指出的那样,它们比现代处理器上的32位整数更快。

答案 2 :(得分:1)

在嵌入式系统中,shortunsigned short数据类型用于访问需要比本机整数少的位的项。

例如,如果我的USB控制器有16位寄存器,而我的处理器有一个本机32位整数,我会使用unsigned short来访问寄存器(假设unsigned short数据类型是16位)。

有经验的用户的大多数建议(参见news:comp.lang.c ++。moderated)是使用本机整数大小,除非必须使用较小的数据类型。使用short来节省内存的问题是这些值可能会超出short的限制。此外,这可能会对某些32位处理器造成性能影响,因为它们必须在16位变量附近获取32位并消除不需要的16位。

我的建议是首先处理程序的质量,如果有必要,只考虑优化并且你的日程安排有额外的时间。

答案 3 :(得分:1)

使用类型short并不能保证实际值会小于int类型的值。它允许使它们更小,并确保它们不会更大。另请注意,short的大小必须大于或等于char

上面的原始问题包含有问题的处理器的实际大小,但是当将代码移植到新环境时,只能依赖弱相对假设,而无需验证实现定义的大小。

C头<stdint.h> - 或者,来自C ++,<cstdint> - 定义指定大小的类型,例如uint8_t,对于无符号整数类型,正好是8位宽。尝试符合外部指定的格式(如网络协议或二进制文件格式)时,请使用这些类型。

答案 4 :(得分:0)

如果你有一个很大的数组并且int太大了,那么short类型非常有用。

鉴于数组足够大,节省内存将非常重要(而不仅仅是使用整数数组)。

Unicode数组也是短编码的(尽管存在其他编码方案)。

在嵌入式设备上,空间仍然很重要而短路可能非常有用。

最后但并非最不重要的是,一些传输协议坚持使用短路,所以你仍然需要它们。