linearScanEnd 编译指示
linearScanEnd 编译指示用来告知编译器如何处理 Nim case 语句。这个编译指示在语法上必须是一个语句:
case myInt
of 0:
echo "最常见的情况"
of 1:
{.linearScanEnd.}
echo "第二常见的情况"
of 2: echo "不常见:使用分支表"
else: echo "也不常见:使用了分支表,数值为 ", myInt
在这个例子里, 0 和 1 分支比其它情况更加常见。所以,生成的汇编代码应该首先测试这两个值以使 CPU的分支预测器有更大的几率预测成功(避免出现开销高昂的 CPU 流水线停滞)。 其它的情况则可以放到跳转表里,其开销为 O(1),但代价是一次(很可能出现的)流水线停滞。
linearScanEnd 编译指示应该被到最后一个需要进行线性扫描的分支里。如果放到整个 case 语句最后那个分支里,那么整个 case 语句都会使用线性扫描。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .