【发布时间】:2011-02-28 19:33:46
【问题描述】:
不久前,我读过一些关于“内联”的内容。 .Net 编译器将从小方法中注入代码(内联)以加快执行速度。
是否有可能来自引用的 dll 的方法代码被内联到我自己的代码中?
【问题讨论】:
不久前,我读过一些关于“内联”的内容。 .Net 编译器将从小方法中注入代码(内联)以加快执行速度。
是否有可能来自引用的 dll 的方法代码被内联到我自己的代码中?
【问题讨论】:
是的,这是可能的,在 JITting 时。
不是在编译时。
这意味着您的程序集将只包含您编写时使用的代码,但是当它在运行时被 JIT 转换为本机机器代码时,JIT 编译器可能会将其他程序集中的小方法内联到您自己的代码中。
【讨论】:
是的。如果您不使用 ngen.exe 预编译程序集,则 JIT 编译器可以自动跨程序集内联。
【讨论】:
准确地说,没有。
但如果 DLL 的 Lib 可用(DLL 代表动态链接库,我们无法静态链接)它可能会发生。
自动内联作为优化的一个步骤,只在小函数或很少使用的函数上执行,但总是在库上。
总而言之,静态链接库(Windows 中的 *.lib 或 Unix 中的 .a)可以复制到您的程序中,但动态链接库(Windows 中的.dll 或 Unix 中的 *.so UNIX) 不能。
如果是 .NET 或类似框架,情况会有所不同。
【讨论】:
它通常很有可能。 但你不能自己决定,它的编译器决定:
检查:http://www.ademiller.com/blogs/tech/2008/08/c-inline-methods-and-optimization/
【讨论】: