【发布时间】:2016-11-12 14:38:51
【问题描述】:
压倒性的建议似乎是更喜欢 C 中的 ints,除非空间很重要 (http://c-faq.com/decl/inttypes.html)。
倾向于使用尽可能短的类型不是更有意义吗?
较短的类型在大型集合中具有明显的优势——使用较短的类型,集合将占用更少的空间。
在数值函数中,ints 有一个优势,因为 CPU 处理它们应该更快,但是当我声明一个 @ 时,优化器的工作不就是交换一个 int 987654325@ 在堆栈上,然后我继续计算?
我尝试编译几个数值函数,一次使用短裤,然后使用整数,我在 -O3 处得到了相同的输出程序集(短裤是 2 个字节,整数在我的架构上是 4 个)所以看起来int 建议不再有效,特别是考虑到空间节省的潜力,考虑到 CPU/内存性能差距的扩大,这比以往任何时候都更重要。 (我认为数据结构同时用于数字和大型集合是很常见的)。
有什么理由我不应该倾向于默认为尽可能短的类型?
【问题讨论】:
-
程序集不可能完全相同:如果不出意外,则需要将数据转换为另一种类型。
-
@ScottHunter 我尝试了类似
$t compute_${t}($t a, $t b) { $t sum = 0; for($t i; i<30; i++){ sum += a+2*b; } return sum; }的方法,但在这两种情况下都减少到了lea 0x1(%rsi),%eax imul %eax,%edi imul $0x1e,%edi,%eax retq。我想如果一切都发生在寄存器中,那么就不需要转换了。
标签: c optimization