c++ - 自定义语言中 C++ 的 C-Wrapper DLL 的性能

标签 c++ c performance programming-languages wrapper

目前我正在开发我自己的编程语言用于学习目的,因为我想支持 C++ 代码并且 C++ 的 ABI 不受所有编译器的支持(afaik),我的想法是实现对 C ABI 的支持并创建包装器在 C 中为 C++ 编写的 dll。

编辑:我要求运行时开销。

问题是,如果基本上我对 C++ 对象所做的一切都通过这个包装器 dll 进行路由,我会得到多少开销?或者是否有适用于所有 C++ 编译器的其他解决方案?

dll 将使用注释中的代码:

MyClass a = new MyClass; // void* a_handle = MyClass_new();
a.Foobar(5);             // MyClass_Foobar(a_handle, 5);

最佳答案

正确回答“这会好吗?”通常是“测试并衡量它。”

不过,总的来说,我希望额外函数调用的性能损失可以忽略不计。它应该小于虚函数调度开销,并且小于或等于将一种语言的接口(interface)绑定(bind)到另一种语言的成本,而这两种成本都是人们经常发生而不必太担心的成本。

除了选择特定编译器的 ABI(Itanium、Visual C++ 和 GCC 在各自平台上都是标准的或大部分是标准的),我不知道还有其他方法可以处理 C++ ABI 问题。您使用 C 包装器的方法也被其他项目使用。 MathGL ,例如,这样做,它更进一步,providing C++ headers包含除了调用 C 接口(interface)外什么都不做的全内联类,因此无论使用何种 C++ ABI,都可以使用它们。

关于c++ - 自定义语言中 C++ 的 C-Wrapper DLL 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190207/

相关文章:

c++ - 函数指针是否不支持 C++ 中的实例类型

c - 如何使用 Visual Studio 调试 SQLite 源代码

android - 合并两个 Sqlite 数据库并从附加数据库转储数据(无法打开数据库)

c++ - m 和 mm 文件扩展名的困境

c++ - 是否可以在 C++ 中将 std::map 与没有任何复制运算符的类一起使用?

c - 为包含灵活数组成员的结构动态分配内存

c - Linux C 程序 : where did this SIGABRT come from?

performance - CRC32(或替代哈希算法)的带宽

java - 最有效地合并 2 个文本文件。

java - 将 DLL 包装成 Java