如果我有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是否在程序集中实现了类似跳转表的任何内容。
答案 0 :(得分:5)
LLVM做出它认为匹配最快的东西。有时这是一个跳转表,有时它不是。这取决于完全匹配,包括您使用的匹配功能的数量。 (比如@,if,等等。)