是否有可能跨DLL进行C ++编译器内联方法调用? 是否可以使用.NET JIT?
答案 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)标志。
此标志告诉链接器跨模块边界进行优化,包括函数内联。