c - 我应该使用什么类型才能获得最快的计算速度?

标签 c performance optimization c99

我正在制作一款 2D 射击游戏,因此我必须在数组中填充大量子弹,包括它们的位置以及它们的去向。

所以我有两个问题,一个是内存使用,特别是编写数组,这些数组不会使事物不对齐,并导致大量填充或对齐,从而降低计算速度。

第二是计算速度。

首先,这意味着选择整数或 float ...现在我选择整数(如果有人认为 float 更好,请这么说)。

然后,这也意味着选择该类型的变体(8 位?16 位?C 令人困惑的默认值?CPU 字大小?单精度? double ?)

因此问题是:在现代处理器(即:常见的 x86、ARM 和其他流行处理器,不用担心 Z80 或 36 位处理器)中,C 中的哪种类型最快,以及在考虑速度 AND 时哪种类型更合理帐户内存使用情况?

另外,签名和未签名在速度上有差异吗?

由于投票接近而进行编辑:是的,这可能是过早的优化,但我不仅询问 CPU 使用情况,还询问内存使用情况(可能会有很大差异),而且我正在做这个项目来锻炼我的 C 技能,它有好几年我没有用 C 编写代码,我想找点乐子,找到限制并扩展它们,同时学习新标准(上次我使用 C 时它仍然是 C89)。

最后,当我发现新标准中存在一些新的有趣类型(如 int_fast*_t)时,提出这个问题的主要动机只是黑客的好奇心。

但是如果你还是觉得这个问题不值得问的话,那我可以删掉这个问题,去细读标准和一些书籍,自学。那么如果有一天其他人也有同样的好奇心,那就不是我的问题了。

最佳答案

我想说 int 应该最适合您的 CPU。但 C 标准确实有:

The typedef name int_fastN_t designates the fastest signed integer type with a width of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer type with a width of at least N

所以理论上你可以这样说:“我需要它至少为 16 位,所以我应该使用 int_fast16_t”。实际上,这可能会转换为普通的 int

<小时/>

我怀疑在您真正遇到可以尝试解决的性能问题之前考虑这些还为时过早。我认为最好是在问题发生时解决问题,而不是试图想出一个难以捉摸的 super 解决方案来解决 future 所有可能出现的问题。

关于c - 我应该使用什么类型才能获得最快的计算速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445323/

相关文章:

c - 我的第一个 C 程序

C中的循环(ring)缓冲区写入方法

javascript - 具有多个同名标记的性能测量

c++ - OpenCV - 基本操作 - 性能问题 [模式 : Release]

sql - 优化sql查询

c - 如何将多个整数组合成一个字符串并在其间添加符号?

c - 如何检查 stdin 是否仍然打开而不阻塞?

c++ - 为什么编译器以不同的方式优化这些情况?

c# - 为什么人们说 SqlDataReader.GetXXX(i) 比 SqlDataReader[i] 快?

javascript - firebug - 如何检测调用了哪些函数或从何处调用了函数