是否可以在Rust中优化空函数?

桑杰·瓦玛(Sunjay Varma)

我想在代码中的功能门后面放置一些影响性能的函数调用。如果未启用该功能,我正在考虑仅实现该功能的空实现。这样,希望Rust编译器可以将其完全从函数中删除。

像这样:

// Included if feature is enabled
fn foo() {
    // ...
}

// Included if the feature is disabled
fn foo() {}

// Performance critical code
for i in 1..1000000000 {
    // ...
    foo();
}

如果对foo()的调用为空,会优化它吗?

卢卡斯(Lukas Kalbertodt)

只需在令人惊叹的Compiler Explorer中尝试一下即可

您的示例的结果程序集是:

example::main:
    push    rbp
    mov     rbp, rsp
    mov     eax, 1
.LBB0_1:
    xor     ecx, ecx
    cmp     eax, 1000000000
    setl    cl
    add     ecx, eax
    cmp     eax, 1000000000
    mov     eax, ecx
    jl      .LBB0_1
    pop     rbp
    ret

如您所见,这里没有call指令,foo()也不会被调用。但是,您可能想知道为什么不删除该循环,因为它对外界没有影响。我可以假设有时在某些意义上说这些循环实际上是在浪费时间。如果将计数器减少到100,则循环将被完全删除。

无论如何:是的,优化器将删除空函数!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否有返回空函数中函数结果的目的?

ReactJS中的空函数

非空函数中的return命令是否必要?

是否可以断言一个函数是否为空函数?

是否可以通过命名其参数在Rust中调用函数?

是否可以在Rust中的函数内定义可选参数?

是否可以使用多线程同时执行非空函数?(C ++)

我可以使用 Roslyn DocumentEditor 将语句插入到空函数体中吗

使用公用的空函数而不是在每个类实例中创建一个新的空函数是否更有效?

是否可以优化numba函数中的此循环以使其运行更快?

如何在Jasmine中测试空函数?

从非空函数中释放内存

Scala是否在链接函数中执行优化?

React:是否可以通过将 this.setState 设置为空函数来防止卸载后状态更新?

是否可以将 &self 传递给 rust 中的另一个函数

是否可以在Rust中收到指向C函数的指针并进行回调?

Rust是否可以将函数/方法应用于数组或向量中的每个元素?

Rust中模取幂密码函数的优化实现

为什么我可以在不使用Java中返回值的情况下调用非空函数?

是否可以在Rust中创建此功能?

Moq:如何验证Action <T>参数是否为空函数?

是否可以在 Rust 的常量泛型上使用函数

Spark是否可以在pyspark中优化相同但独立的DAG?

是否可以在Java 6中设置RhinoScriptEngine的优化级别?

编译器可以优化汇编中的函数序言吗?

为什么不能在Shell中定义空函数?

需要在Kotlin中重写的空函数的编码约定

在非空函数中,我不希望返回任何内容

如何清除c ++中的“非空函数结束”错误?