• Delphi XE4 inline 的用法


    为了提高应用程序的性能,可以用inline声明一个函数过过程,对于声明为inline的过程,编译器在编译时,会取代正常的过程调用方式,取而代之是直接把这个函数的编译代码拿过来生成到调用该过程的地方,有多处调用一个函数,都直接在调用处插入函数的编译代码,这样的弊端,会生成较大的EXE文件。

    声明的方法:

    procedure MyFunc(x:integer):string;inline

    有多种情况的函数或过程是不支持inline的:

    • 后绑定的方法,如virtual,dynamic,message方法
    • 包含汇编的过程
    • Contructors与destructors方法
    • The main program block, unit initialization, and unit finalization blocks cannot be inlined.
    • Routines that are not defined before use cannot be inlined.
    • 用开放数组为参数的过程,如:procedure Add(A: array of Integer)
    • Package中支持inline,但Packages间不支持
    • 循环引用的Unit间不支持inline,如a,b,c三个unit,a引用b,b引用c,c引用a,则编译时不生成inline代码,编译器在inline代码时,循环依赖的unit不编译出inline代码,但对于其中引用的unit,还是生成inline代码的,如在上面的例子中,如果A单元也采用了D单元,从单元D的代码可能会被内联,因为它不参与循环依赖。
    • 如果一个过程定义在interface部分,实现代码在implementation部分,则不会inline
    • while do 或 repeat until等中使用的过程


    关于inline有三个编译条件变量可用:
    {$INLINE ON}:支持inline指令,这是默认的
    {$INLINE OFF}:关闭inline编译方式,不支持inline
    {$INLINE AUTO}:自动支持inline,当inline on 时,对于32byte的过程自动进行inline.

    参考: Delphi help Calling Procedures and Functions

  • 相关阅读:
    【POJ 2987 Firing】 最大权闭合子图
    【sgu176】有源汇有上下界的最大/最小流
    【HDU1263 水果】 STL之map应用经典好题
    【HDU1227 Fast Food】经典DP
    【hdu1043 && poj 1077】八数码问题
    有上下界的网络流问题
    【HDU4521】 dp思想+线段树操作
    miracl库下椭圆曲线方程常用函数使用入门
    函数指针
    python数据查询操作之 一场缺少db.commit()引发的血案……
  • 原文地址:https://www.cnblogs.com/jijm123/p/15821232.html
Copyright © 2020-2023  润新知