我对 Dart FFI 是如何实现的非常感兴趣。它们与普通函数调用一样便宜,还是在幕后做繁重的工作?
我在互联网上进行了搜索,但找不到太多信息。我只找到this article谈论一下参数传递和 ABI 的见解。另外,我想它应该有一些保护,因为Dart有GC之类的东西,而C没有。
感谢您的任何提示!
最佳答案
Dart FFI 使用 C 语言 dlopen()适用于 Windows 以外的平台(非 POSIX)。它是一个非常轻量级的共享对象接口(interface)。已编译的共享对象包含一个包含符号名称及其内存偏移量的表。使用 dlopen() 打开共享对象,然后使用 dlsym() 在内存中找到特定的包含项目。及其符号名称。这为名为“testDartFFI()”的函数提供了一个内存地址。然后,dart 运行时可以使用内存地址调用该函数,使用 Dart 原型(prototype)根据 C 标准正确传递和返回值。从开销角度来看,它与调用其他动态链接的系统库没有太大区别。
关于flutter - Dart FFI 到底是如何实现的?它们与普通函数调用一样便宜,还是在幕后做繁重的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69421283/