1

我的主循环中有一个名为 ~200hz 的函数。它在 NXT 上运行,因此处理器非常慢。在我的函数中,它实例化一个变量,将其写入屏幕,然后结束。由于处理器速度的原因,我需要这个函数尽可能快,并且想知道在全局范围内声明一个变量并在每次调用函数时重置它是否更快,或者在函数中实例化它。为了澄清,哪个例子会更快?

 int foo=0;
 void bar() {
    foo=0;
    //do something with foo
 }

对比

void bar() {
   int foo=0;
   //do something with foo
}

显然,我想在我的代码中使用第二个片段,因为全局变量被认为是“坏的”,但 NXT 处理器真的很慢。

4

2 回答 2

1

每当你有这样的事情时,最好的办法就是简单地测量这两个选项的速度。如果不对其进行测试,实际上没有任何方法可以确定哪个会更好,特别是考虑到您甚至不知道您的编译器是如何编译您的代码的。

于 2014-08-29T15:03:43.967 回答
0

通常,自动变量的分配在 C 中是一个 noop:所有局部变量都使用一条递减堆栈指针的指令分配,这在几乎所有函数中都需要完成。而且,通常,对堆栈内存的访问是最快的。因此,一般来说,您应该期望两个程序之间没有性能差异。如果存在差异,您应该期望全局变量会慢一点。

但是,我故意使用“通常”和“一般”这两个词:硬件可能存在,但情况并非如此。我不知道你的处理器。因此,可以肯定的是,请听从 Alex Kleiman 的建议和衡量标准。在优化方面,测量是唯一的事实来源。

于 2014-08-29T16:29:41.187 回答