gpt4 book ai didi

rust - 如何声明一个函数而不实现它?

转载 作者:行者123 更新时间:2023-12-02 07:58:12 25 4
gpt4 key购买 nike

我想比较函数的不同实现的程序集,但我不想实现某些功能,只需声明它们。

在 Rust 中,前向声明通常是不必要的,因为编译器不需要函数来解析它们(与 C 不同)。但是,是否有可能做一些等同于前向声明的事情?

最佳答案

如果您将函数声明为 #[inline(never)]您将获得一个函数调用指令,以防止进一步优化。

主要限制是优化后你的函数不能为空,所以它必须有一些副作用(感谢@hellow 建议使用 compiler_fence 而不是 println! )。

例如,此代码 ( godbolt ):

pub fn test_loop(num: i32) {
for _i in 0..num {
dummy();
}
}

#[inline(never)]
pub extern fn dummy() {
use std::sync::atomic::*;
compiler_fence(Ordering::Release);
}

将产生以下程序集(使用 -O ),我认为您需要:

example::test_loop:
push r14
push rbx
push rax
test edi, edi
jle .LBB0_3
mov ebx, edi
mov r14, qword ptr [rip + example::dummy@GOTPCREL]
.LBB0_2:
call r14
add ebx, -1
jne .LBB0_2
.LBB0_3:
add rsp, 8
pop rbx
pop r14
ret

加上 dummy() 的代码那实际上是空的:
example::dummy:
ret

关于rust - 如何声明一个函数而不实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60702335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com