gpt4 book ai didi

c++ - 小的重复算术与创建新变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:00 28 4
gpt4 key购买 nike

我正在用 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...
}

下面是示例图:

Example Diagram

第一个更容易理解,但我希望使用更多内存。它有多大的不同?

最佳答案

需要思考的几点:

  1. 如果完整版也没有任何递归,您可以不用担心堆栈上的变量(p1x 等)。
  2. 堆栈消耗是短暂的,除非您有病态代码,例如深度递归,每一帧都很重,否则不会影响您。
  3. 在内存预算紧张的情况下,递归通常不是一个好主意。
  4. 您将它们作为明确命名的变量这一事实并不意味着它们在执行时会如此。
  5. 任何体面的编译器都可能识别变量的生命周期并将它们推送到寄存器。请使用您当前使用的编译器优化级别验证这一点,并在需要时考虑提高它。

此外,p1x 等这些值的预期范围是多少。为什么不使用 short int?

堆栈内存增长的短暂性意味着您的峰值堆内存不会受到影响。堆栈可以增长和缩小,具体取决于堆栈的布局和预算量,您可能根本不必担心这一点。

注意:任何和所有堆分配都需要仔细审查。尝试实现自定义分配器,而不是产生标准的 malloc() block 开销。当然,您没有在问题中提到堆,但请记住这一点。

关于c++ - 小的重复算术与创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008800/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com