用于C ++的C-Wrapper DLL在自定义语言中的性能

时间:2014-06-12 17:12:53

标签: c++ c performance programming-languages wrapper

目前我正在开发自己的编程语言用于学习目的,因为我想支持C ++代码并且所有编译器都不支持ABI for C ++(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);

1 个答案:

答案 0 :(得分:1)

正确答案,“这会表现好吗?”通常是“测试并测量它。”

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

如果没有选择特定编译器的ABI(Itanium,Visual C ++和GCC都是标准的或大多数是各自平台上的标准版),我不知道另一种处理C ++ ABI问题的方法。您使用C包装器的方法也被其他项目使用。例如,MathGL执行此操作,并且更进一步,providing C++ headers包含除了调用C接口之外什么都不做的所有内联类,因此无论C ++ ABI如何都可以使用它们。使用