目前我正在开发我自己的编程语言用于学习目的,因为我想支持 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/