代码之家  ›  专栏  ›  技术社区  ›  vtd-xml-author

C中的运行时内联

  •  2
  • vtd-xml-author  · 技术社区  · 16 年前

    关于C的几个问题#

    1. C是否支持运行时内联?
    2. JIT是在代码执行之前还是执行期间进行优化的?
    3. 虚拟函数可以内联吗?
    3 回复  |  直到 16 年前
        1
  •  7
  •   dthorpe    16 年前

    C语言不做内联,但是.NET CLR JIT编译器可以。

    虚拟可以在密封类中内联,但我不确定非密封类。我想不会。

    首次调用函数时,JIT会在代码执行之前进行优化。因为在JIT开始工作之前,您没有任何要执行的代码。:p jit仅在对函数的第一次调用中发生一次,而不是在对函数的每次调用中发生。

    还要注意,内联只在程序集(dll)内完成。JIT编译器不会将代码从另一个程序集复制到该程序集的代码中。

        2
  •  7
  •   Andrey    16 年前

    C不显式支持任何内联。在进行优化时,JIT编译器可能会在后台执行一些内嵌操作。

        3
  •  4
  •   Qwertie    16 年前

    C编译器本身不做内联(您可以通过在Reflector中打开程序集来验证)。clr的jit编译器执行内联,这里是 one blog post 关于这个问题(还有很多)。

    注意,通常,.NET编译器不能跨DLL边界执行内联,因为DLL可以更改 之后 依赖dll的代码已编译。所以在运行时进行内联是有意义的。