是否有可能跨DLL进行C ++编译器内联方法调用?

时间:2010-12-13 21:44:49

标签: .net c++ compiler-construction jit

是否有可能跨DLL进行C ++编译器内联方法调用? 是否可以使用.NET JIT?

4 个答案:

答案 0 :(得分:4)

对于.NET抖动,这是肯定的。它只是从DLL加载IL,即时代码生成使得它来自DLL的事实消失了。来自任何DLL的所有代码都进入相同的加载器堆。这样做的一个结果是除非卸载整个AppDomain,否则无法卸载DLL。

对于C ++编译器,确定为No,导出的函数是预编译的,位于固定地址,与DLL基址的偏移量。尽管可以进行优化,但仍需要间接跳转到IAT。但不是内联,必须由编译器完成。

答案 1 :(得分:1)

如果您未包含“.net”标记,则答案为。但是,对于“.net”标记,抖动应至少能够优化,如果不是 inline ,除非DLL是您的P /的本机代码DLL发起反对。

答案 2 :(得分:1)

在正常情况下,编译器必须内联在C ++头文件中完全定义的函数,因为该函数没有指定的编译单元。当然,可以说该函数甚至不属于DLL,因为你不会在那里找到函数的入口点,但恕我直言,这只是一个挑剔的观点。

答案 3 :(得分:0)

您应该查看编译器的/GL (Whole Program Optimization)标志。

此标志告诉链接器跨模块边界进行优化,包括函数内联。