【问题标题】:C Variable instantiation speedC 可变实例化速度
【发布时间】:2014-08-29 14:55:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 衡量差异。
  • 使用第二个片段。显然只能使用寄存器来完成,而第一个 sn-p 可能(可能会)涉及 chache/memory/file
  • 每秒 200 次?听起来您最多有 5 毫秒的时间来处理 foo。
  • 你的处理器有多快?函数有多复杂?
  • 将变量写入屏幕将使循环内外初始化之间的时间差相形见绌

标签: c nxt


【解决方案1】:

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

【讨论】:

  • 另外,请使用常识/良好的判断力。正如@DonShankin 在 cmets 中指出的那样,正在执行的显示 I/O 可能需要比初始化局部变量更长的数量级 - 所以不用担心。 如果函数太慢,那么调查/分析。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 2019-02-11
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多