C- wrapper DLL在自定义语言中的性能

Performance of C-Wrapper DLL for C++ in custom language

本文关键字:性能 语言 自定义 wrapper DLL      更新时间:2023-10-16

目前我正在开发自己的编程语言作为学习目的,因为我想支持c++代码,而c++的ABI不是所有编译器都支持的(afaik),这个想法是实现对C ABI的支持,并在C中为c++创建包装器。

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

问题是,如果基本上我用c++对象做的所有事情都是通过这个包装器dll路由的,我会得到多少开销?还是有其他的解决方案,将工作于所有的c++编译器?

dll将使用如下注释中的代码:

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

正确的答案通常是"测试它并测量它"。

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

没有选择特定编译器的ABI (Itanium, Visual c++和GCC在各自的平台上都是标准的或大部分标准的),我不知道还有其他方法来处理c++ ABI问题。您使用C包装器的方法也被其他项目使用。例如,MathGL就做到了这一点,并且更进一步,它提供了包含全内联类的c++头文件,这些类除了调用C接口之外什么都不做,因此无论使用的是哪种c++ ABI,都可以使用它们。