Rust的“匹配”和C的字节“切换”一样快吗?

时间:2016-08-26 08:34:00

标签: c switch-statement rust match

如果我有Rust代码:

let x: u8;
let y = match x {
    0 => "0",
    1 => "1",
    // ...
    255 => "255",
    _ => unreachable!(),
};

它会比C代码快(或更快):

byte x;
char* y;
switch(x) {
  case 0: y = "0"; break;
  case 1: y = "1"; break;
  ...
  case 255: y = "255"; break;
}

我想知道Rust是否在程序集中实现了类似跳转表的任何内容。

1 个答案:

答案 0 :(得分:5)

LLVM做出它认为匹配最快的东西。有时这是一个跳转表,有时它不是。这取决于完全匹配,包括您使用的匹配功能的数量。 (比如@,if,等等。)