C可变实例化速度

C可变实例化速度,c,nxt,C,Nxt,我的主回路中有一个函数,叫做~200hz。它在NXT上运行,因此处理器速度相当慢。在我的函数中,它实例化一个变量,将其写入屏幕,然后结束。由于处理器的速度,我需要这个函数尽可能快,我想知道在全局范围内声明一个变量,并在每次调用函数时重置它,或者在函数中实例化它是否更快。为了澄清,哪个示例更快 int foo=0; void bar() { foo=0; //do something with foo } vs 显然,我想在我的代码中使用第二个片段,因为全局变量被认为是“坏

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

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


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

每当你有这样的东西时,最好的办法就是简单地测量两个选项的速度。没有测试就无法确定哪一个更好,特别是考虑到你甚至不知道编译器是如何编译代码的。

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


然而,我故意使用了“通常”和“一般”这两个词:硬件可能存在,但事实并非如此。我不知道你的处理器。因此,可以肯定的是,请听从亚历克斯·克莱曼的建议和措施。当涉及到优化时,度量是唯一的真理来源。

度量差异。使用第二个snippit。显然,这只能通过寄存器来完成,而第一个代码段可能(可能会)每秒涉及200次chache/memory/files?听起来你最多有5毫秒的时间来处理foo。你的处理器有多快?函数有多复杂?将变量写入屏幕将缩短循环内部和外部初始化之间的时间差。同样,只需使用常识/良好的判断即可。正如@DonShankin在评论中指出的那样,同样正在执行的显示I/O可能比初始化局部变量的时间长几个数量级——所以不用担心。如果功能太慢,则调查/配置文件。
void bar() {
   int foo=0;
   //do something with foo
}