linearScanEnd 编译指示

linearScanEnd 编译指示可以用来告诉编译器如何编译Nim case 语句。 从语法上讲,它必须用作语句:

  1. case myInt
  2. of 0:
  3. echo "most common case"
  4. of 1:
  5. {.linearScanEnd.}
  6. echo "second most common case"
  7. of 2: echo "unlikely: use branch table"
  8. else: echo "unlikely too: use branch table for ", myInt

在这个例子中,case分支 01 比其他情况更常见。 因此,生成的汇编程序代码应首先测试这些值,以便CPU的分支预测器有很好的成功机会(避免昂贵的CPU管道停顿)。 其他情况可能会被放入O(1)开销的跳转表中,但代价是(很可能)管道停顿。

应该将 linearScanEnd 编译指示放入应通过线性扫描进行测试的最后一个分支。 如果放入整个 case 语句的最后一个分支,整个 case 语句使用线性扫描。