【问题标题】:Fastest way to zero最快的归零方法
【发布时间】:2012-05-06 19:43:48
【问题描述】:

清零 unsigned int 的最快方法是什么?

我目前只是将值设置为0,但我不知道是否有任何技巧可以将变量归零?在我当前的项目中,我需要几个时钟周期。我使用的是标准 8051 处理器,如果有帮助的话,我需要将两个不同的变量归零。

【问题讨论】:

  • 您确定没有更好的优化机会吗?
  • 将其设置为0 应该已经很快了。你真的会因为变量赋值而失去性能吗?看起来非常微型。
  • 不在我当前的中断中。它每 10 [us] 中断一次。希望我一开始有远见选择更快的处理器,但我致力于我目前使用的处理器。

标签: c zero 8051 unsigned-integer


【解决方案1】:

问题标记为 8051,因此如果需要将寄存器清零,则将寄存器与自身进行异或运算将是一种更快的清零方法,而不是在其中移动零。一个操作码提取和解码与操作码提取和操作数提取。

如果您使用高级语言而不是手工汇编或用 asm 编写,那么最好使用var = 0。编译器将负责所需的优化。

【讨论】:

  • 谢谢。我认为 XORing 可能会给我我需要的几个周期。欣赏建议
  • 自异或的速度差不多。不过我很困惑,除非您直接在汇编程序中编程,否则几乎任何编译器都会以相同的方式初始化变量。
  • 但是如果你使用高级语言编写代码,那么我认为最好让编译器来优化。
  • 一个好的编译器会使用自异或来实现零赋值,如果这是在目标机器上执行零赋值的最佳方式。 GCC 甚至在 x86 上也能做到这一点,至少在 -Os...
【解决方案2】:

为人类编写代码,不要浪费任何精力来优化不需要优化的东西。当你想给变量赋值为零时,给变量赋值为零:x = 0;

快速编写正确的程序比编写正确的快速程序更容易。

【讨论】:

  • 我肯定会接受这个建议,但这个项目专门针对优化当前存在的内容。这段代码不应该被其他人看到,除了我自己。
  • @JoeWanja 正在处理硬件寄存器。编写了引导 rom 控制台和 NT 设备驱动程序后,我可以根据经验说该代码不适用于人类。它适用于任何工作。
  • 是的,我明白了。 c 标签让我很困惑。
【解决方案3】:

我相信编译器会为你优化这类事情。请记住,微优化会产生微结果。

【讨论】:

    【解决方案4】:

    微优化带来微结果。

    您可以将变量与自身进行异或运算以达到零。很有可能你的编译器已经这样做了,如果不是更快的话。

    【讨论】:

      【解决方案5】:

      如果您还没有这样做,首先尝试实现一种方法来对包含相关代码的代码块进行计时。

      然后,尝试 var = 0;并使用在清单中生成汇编程序的编译器开关。然后对 XOR 解决方案做同样的事情。它代表了一些额外的工作,但是你会在那里得到结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2012-02-10
        • 2011-01-31
        • 2016-05-24
        相关资源
        最近更新 更多