我在这里读取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的函数的好处
回答
某些功能是指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,所以现在这是我的看法。
当它们在聚合—正在主要用于short
IOW的阵列,以利用short
最大的好处来了,或者可能作为结构‐的成员的short
阵列通常占用的阵列的一半的空间int
具有相同数量的条目。
另一个可能的好处是,如果函数被定义为采用short
,则知道该值将在-32768 .. + 32767范围内(在具有2的补码整数和16位short
的系统上),其中是大多数系统),这可能会简化您在函数内部的验证过程。如果通过的类型是int
而不是short
,但有效值的范围是-32788 .. + 32767,那么您必须验证传入的值是否在范围内(假设sizeof(int) > sizeof(short)
,这不是保证但是是典型的)。
否则,类型short
的变量不是很多的帮助,除非你匹配某种外部规格。
+1不是说sizeof(int)总是> sizeof(short)。今天的嵌入式系统在经常是相同的情况下是显着的用途。 – chux
- 1. 从Int到Int映射从Short到Int定义的Scala`+`functor?
- 2. c# - 是SHORT数据类型还是INT?
- 3. 是unsigned short + int类型的实现定义?
- 4. 函数返回字符[]而不是int
- 5. std :: vector构造函数 - 为什么int而不是int *?
- 6. 为主键列使用mediumint而不是int的好处?
- 7. 的Java:使用短而不是INT
- 8. 为什么InputStream read()返回一个int而不是一个short?
- 9. WPF文本框接受INT但不是NULLABLE INT?
- 10. TextBox只接受int
- 11. 使用指向int或short int的成员创建struct数组?
- 12. 更改LinkedList接受对象而不是Int?
- 13. 为什么fgets接受int而不是size_t?
- 14. 函数指针不是INT
- 15. 应该int * p长int * p而不是?
- 16. int或char枚举int,而不是ASCII
- 17. R6010:我可以将一个int&传递给一个接受int的函数吗?
- 18. 对于限制<100的循环,使用'short'而不是'int'是明智吗?
- 19. java将int转换为short
- 20. 用Short和int重载
- 21. 将short int []转换为char *
- 22. 为什么int * []衰减为int **而不是int [] []?
- 23. OCaml的 - 给类型的函数(INT - > INT) - > INT
- 24. “构造函数Window(int,int,String,Game)未定义”
- 25. 构造函数SimpleCursorAdapter(MyProgram,int,Cursor,int)未定义
- 26. 构造函数AdPreferences(int,int,String)未定义\t startapp?
- 27. 构造函数String(int,int,char [])在哪里定义?
- 28. 函数返回int而不是null的模型
- 29. 返回处理数组的int函数
- 30. 是否有意义使用std :: unordered_map <int, int>而不是std :: map <int, int>?
使用'short'的最大好处是当它们被用于聚合时 - 在短IOW数组中 - 因为该数组占用int数组的一半空间。另一个可能的好处是,如果函数被定义为“short”,那么您知道该值将在-32768 .. + 32767的范围内(在具有2的补码整数和16位的“short”的系统上,是大多数系统),这可能会简化您在函数内部的验证过程。否则,除非你匹配某种外部规范,否则'short'类型的变量没有多大帮助。 –
@JonathanLeffler为什么不做出这个答案? – ouah
通过“验证过程” - 你的意思是检查溢出?短怎么会更容易? – user1042840