【发布时间】:2015-05-02 23:57:44
【问题描述】:
我正在用 C++ 编写低规格设备(~3MB RAM,~70MHz CPU),我想知道哪个运行效率更高(以及多少)。这是一段简化的代码,每秒运行 120-600 次:
void checkCollisions(int x, int y)
{
int p1x = x, p1y = y+2;
int p2x = x, p2y = y+3;
int p3x = x+3, p3y = y+3;
// And so on...
if (wallAt(p1x-1, p1y) || wallAt(p2x-1, p2y))
setCollision(LEFT, true);
if (wallAt(p1x, p1y) || wallAt(p4x, p4y) || wallAt(p5x, p5y))
inGround = true;
else
inGround = false;
// And so on...
}
或者用它们的定义替换整数:
void checkCollisionsAlt(int x, int y)
{
if (wallAt(x-1, y+2) || wallAt(x-1, y+3))
setCollision(LEFT, true);
if (wallAt(x, y+2) || wallAt(x+3, y) || wallAt(x+2, y))
inGround = true;
else
inGround = false;
// And so on...
}
这是示例的示意图:
第一个更容易理解,但我希望使用更多内存。它有多大的不同?
【问题讨论】:
-
唯一可能的答案是:两者都编码,然后比较它们。
-
关于比较代码,一种方法是编译(有和没有优化)汇编代码并进行比较。
-
可以通过
inGround = wallAt(p1x, p1y) || wallAt(p4x, p4y) || wallAt(p5x, p5y);来减少一些指令 -
与在线征求意见相比,分析代码是了解代码执行情况的更好方法。
-
我的投票是这无关紧要,因为优化编译器会将它们编译成相同的汇编代码。
标签: c++ performance algorithm memory memory-efficient