我正在制作2D射击游戏,因此我必须在阵列中填充许多子弹,包括它们的位置,以及它们的位置。
所以我有两个问题,一个是内存使用,特别是编写不会使对齐的数组,导致大量的填充或对齐,这会使计算的速度变得很糟糕。
第二是计算速度。
首先这意味着选择整数或浮点数...现在我要用整数(如果有人认为浮点数更好,请说出来)。
然后,这也意味着选择那种类型的变体(8位?16位?C混淆默认值?CPU字大小?单精度?双精度?)
因此问题是:现代处理器中哪种类型的C最快(即:常见的x86,ARM和其他流行的处理器,不用担心Z80或36位处理器),以及在采用速度时哪种类型更合理记忆在帐户中使用?
此外,签名和未签名的速度有差异吗?
编辑,因为关闭投票:是的,它可能是过早的优化,但我不仅要求CPU使用,而是内存使用(可能会有很大差异),我也在做项目来锻炼我的C技能,它有些年头我不用C编码,我想有一些乐趣并找到限制并拉伸它们,并且还学习新标准(上次我使用C它仍然是C89)。
最后,当我发现新标准中存在一些新的有趣类型(如int_fast * _t)时,提出这个问题的主要动机就是黑客的好奇心。
但如果你仍然认为这不值得问,那么我可以删除这个问题并仔细阅读标准和一些书籍,自己学习。如果有一天其他人有同样的好奇心,那不是我的问题。
答案 0 :(得分:7)
我会说int
对你的CPU来说应该是最舒服的。但C标准确实有:
typedef名称int_fastN_t指定最快的有符号整数 宽度至少为N的类型。 typedef名称为uint_fastN_t 指定宽度至少为最快的无符号整数类型 Ñ
所以理论上你可以说:“我需要它至少16位所以我将使用int_fast16_t
”。在实践中,可能会转换为普通int
。
我怀疑在您遇到可以尝试解决的性能问题之前考虑这些问题还为时过早。我认为解决问题比解决问题更好,而不是试图想出一个可以解决所有未来可能问题的难以捉摸的超级解决方案。
答案 1 :(得分:2)
在所有现代处理器(x86,ARM,MIPS)中,单精度浮点加法和乘法与32位整数运算一样快,即每个时钟周期一个结果。使用浮点运算可以更轻松地计算空间中的位置和速度,因此请使用浮点数。单精度浮点数为32位,与32位CPU上最有效的整数类型相同。