我对Dart FFI的实现非常感兴趣。它们是否像普通的函数调用一样便宜,或者它们在底层做了大量的工作?
我在互联网上搜索了,但找不到很多信息。我发现这篇文章只讨论了一点关于论证传递和abi的见解。此外,我想它应该有一些保护,因为Dart有GC之类的东西,而C没有。
谢谢你的提示!
Dart FFI在Windows(非posix)以外的平台上使用C的dlopen()。它是一个非常轻量级的共享对象接口。编译的共享对象包含一个包含符号名及其内存偏移量的表。使用dlopen()打开共享对象,然后使用dlsym()及其符号名在内存中找到特定包含的项。这提供了一个内存地址,例如,一个名为"testDartFFI()"的函数。然后,dart运行时可以使用内存地址调用这个函数,使用dart原型正确地传递和返回基于C标准的值。开销方面,它与调用其他动态链接的系统库没有太大的不同。