你能在 Rust 中声明一个要保存在 CPU 寄存器中的变量吗?

Kaa*_*aan 1 cpu-registers rust

在 C 中,您可以建议编译器将变量保存在寄存器中,如下所示:

int main() {
    register int varname = 1; 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Rust 中是否有等价物?或者,如果非常频繁地使用整数,是否可以信任编译器自己执行此操作?

Phi*_*l H 5

不,Rust 没有等价物

没有办法提示编译器为特定变量使用寄存器,就像目前 C++ 中没有的那样。

register 只是一个提示,在 C 中只有 1 个特定的效果

在 C 中,register只是对编译器的一个提示;编译器仍然决定哪些变量进入寄存器。

但是,它的作用是阻止您获取变量的地址。更重要的性能影响是,这意味着编译器可以执行一些原本不可用的优化,即使它实际上并未将值放入寄存器中。

而 Rust 已经为你提供了

Rust 的所有权模型允许您拥有一个从不别名的值,并且编译器可以自由地对其进行更大量的优化——没有像 C 那样的指针赋值(不使用 unsafe)。编译器还可以自由使用所有权和生命周期信息来通知其寄存器使用情况。

  • 我不知道有哪个现代 C 编译器会监听寄存器提示;) (3认同)