linearScanEnd 编译指示

linearScanEnd 编译指示用来告知编译器如何处理 Nim case 语句。这个编译指示在语法上必须是一个语句:

  1. case myInt
  2. of 0:
  3. echo "最常见的情况"
  4. of 1:
  5. {.linearScanEnd.}
  6. echo "第二常见的情况"
  7. of 2: echo "不常见:使用分支表"
  8. else: echo "也不常见:使用了分支表,数值为 ", myInt

在这个例子里, 0 和 1 分支比其它情况更加常见。所以,生成的汇编代码应该首先测试这两个值以使 CPU的分支预测器有更大的几率预测成功(避免出现开销高昂的 CPU 流水线停滞)。 其它的情况则可以放到跳转表里,其开销为 O(1),但代价是一次(很可能出现的)流水线停滞。

linearScanEnd 编译指示应该被到最后一个需要进行线性扫描的分支里。如果放到整个 case 语句最后那个分支里,那么整个 case 语句都会使用线性扫描。