2013-09-30 55 views
1

我在这里读取Benefit of using short instead of int in for... loop它在循环计数器中使用short而不是纯粹的int,因为在大多数体系结构中short将占用相同数量的内存空间INT。这使我认为短整数实际上没有用,因为它们不会导致人们可能期望的结果,即节省内存。但是,在生产代码中,我经常会看到短整数用作函数参数。例如,当我使用ack-grep浏览coreboot(coreboot.org)时,发现很多功能不足。我意识到coreboot代码是相当低级的,但我想知道在x86架构上使用C而不是int的优点是什么(如果有的话)?我应该什么时候使用它?定义接受short int而不是int的函数的好处

+3

使用'short'的最大好处是当它们被用于聚合时 - 在短IOW数组中 - 因为该数组占用int数组的一半空间。另一个可能的好处是,如果函数被定义为“short”,那么您知道该值将在-32768 .. + 32767的范围内(在具有2的补码整数和16位的“short”的系统上,是大多数系统),这可能会简化您在函数内部的验证过程。否则,除非你匹配某种外部规范,否则'short'类型的变量没有多大帮助。 –

+0

@JonathanLeffler为什么不做出这个答案? – ouah

+0

通过“验证过程” - 你的意思是检查溢出?短怎么会更容易? – user1042840

回答

1

某些功能是指short和其他int

如果一个人想指望在一个short一个集将使用

int CountBits_short(short x); 

的所有位,如果有人想算在int一个集将使用

int CountBits_int(int x); 

还有就是所有位这不是性能问题,只是功能上的差异。


@JonathanLeffler到OP金额高达评论为short有用原因,在他们可能会占用较少的空间。


其他

其他的想法:

在哪里sizeof(int) == sizeof(short)没有性能优势的平台。
否则我们知道sizeof(int) > sizeof(short)

编译器可能会为以下内容创建类似的入口/出口代码,并且性能没有差异。

void foo_s(short bar); 
void foo_i(int bar); 

在传递指针如在

void foo_s(short *bar); 
void foo_i(int *bar); 

sizeof(bar)是相同的,因为它是一个地址,在扩充通过再次没有益处。

带有数组中

void foo_s(short bar[]); 
void foo_i(int bar[]); 

bar变成第一元素的地址,再次具有相同的尺寸,因为它是一个地址,在扩充通过再次没有益处。可能需要的使用short名义上认为在各种量的代码为比int略差功能

性能,以促进/ short和处理器的优选int之间降级。根据定义,int * 1是处理器名义上优选的整数大小。

当然,任何性能问题都需要进行性能分析才能验证,但要点是short用于节省性能潜在标称成本的空间。

* 1仍然在寻找spec def,所以现在这是我的看法。

2

当它们在聚合—正在主要用于short IOW的阵列,以利用short最大的好处来了,或者可能作为结构‐的成员的short阵列通常占用的阵列的一半的空间int具有相同数量的条目。

另一个可能的好处是,如果函数被定义为采用short,则知道该值将在-32768 .. + 32767范围内(在具有2的补码整数和16位short的系统上),其中是大多数系统),这可能会简化您在函数内部的验证过程。如果通过的类型是int而不是short,但有效值的范围是-32788 .. + 32767,那么您必须验证传入的值是否在范围内(假设sizeof(int) > sizeof(short),这不是保证但是是典型的)。

否则,类型short的变量不是很多的帮助,除非你匹配某种外部规格。

+0

+1不是说sizeof(int)总是> sizeof(short)。今天的嵌入式系统在经常是相同的情况下是显着的用途。 – chux

相关问题