当我从本地C代码调用Rust dylib时会发生什么?

时间:2015-04-14 14:16:59

标签: c rust ffi

说,我有一些用Rust编写的虚拟库:

#![crate_type = "dylib"]

#[no_mangle]
pub extern "C" fn foo() {
    println!("bork!");
}

我正在使用C本机代码:

void foo();
int main()
{
    foo();
    return 0;
}

我对两件事特别感兴趣:

  • 是否会在Rust函数调用中生成其他线程?

  • 在这样的调用上会发生多少阻塞 - 堆上的互斥锁,锁,内存分配,等等。

我正在考虑将Rust用于实时DSP应用程序,因此我必须了解此处发生的任何阻塞操作。但是我不够自己在实际的C-Rust互操作实现中挖掘..

1 个答案:

答案 0 :(得分:4)

没有什么特别的事情发生。使用extern C导出的编译的Rust代码看起来与任何其他本机代码相同。

  

是否会在Rust函数调用中生成其他线程?

除非您的代码创建了线程,否则不会创建任何线程。

  

在这样的调用上发生了多少阻塞 - 堆上的互斥锁,锁,内存分配,等等。

不,除非你的代码是这样做的。