flutter - Dart FFI 到底是如何实现的?它们与普通函数调用一样便宜,还是在幕后做繁重的工作?

标签 flutter dart compiler-construction

我对 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/

相关文章:

flutter - Flutter-如何在没有互联网的情况下从坐标获取国家/地区?

flutter - 来自顶部()的图像和图像下方带有文本的框

c - 从一个简单的(也许是最简单的)C 编译器开始?

c# - 如何使用 PHP 将 .NET 源文件编译为可执行文件?

flutter - 确定一个 Map 是否是另一个 Map 的子集

Flutter 覆盖其他应用程序

dart - 最终变量是否有性能提升?

notifications - Flutter:即使我的应用已关闭,我如何接收本地通知?

flutter - 具有json_serializable的复杂模型-List <objects>不转换为映射

c++ - 是否有任何适用于 C++ Windows 开发人员的免费可移植(意思是 <100mb)IDE,其编译器能够进行代码提示并经过测试可与 Win32 API 一起使用?