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

时间: 2024-10-23 13:57:48

Delphi XE4 inline 的用法的相关文章

设置Delphi XE4默认界面样式

VCL BitMap Style Proceject Options->Application->Appearance 选择几个样式 使用代码设置 uses Vcl.Themes;procedure TForm1.Button1Click(Sender: TObject);begin    TStyleManager.TrySetStyle('Amakrits');end; XE4默认皮肤列表 Windows Amakrits Amethyst Kamri Aqua Graphite Aqua

delphi XE4生成ipa并部署到越狱iPad视频教程

[视频教程地址]http://www.tudou.com/programs/view/nbYDWzbbb2g/ 冰力不足 QQ: 55423726 非常简单的 [准备工作]XE4的下载地址:http://pan.baidu.com/share/link?shareid=460087&uk=1060104307 苹果虚拟机的安装看下面的教程:http://diybbs.zol.com.cn/1/34037_629.html 装的是最新版的美洲狮, 安装好MAC系统后, 到苹果开发者官方网站下载这两

C++中的inline的用法

C++中的inline的用法 参考:http://www.cnblogs.com/fnlingnzb-learner/p/6423917.html 1. 引入inline关键字的原因 在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间. 在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导

SQLite与Delphi XE4 (一)

时隔这么久,因为工作中需要将一些图片序列文件进行分析,然后将结果进行分组统计,而分组统计用SQL语法很容易实现,但是要求程序运行的环境中安装有庞大的数据库系统,经过网上的寻找,终于发现了SQLite. SQLite是一款开源的(呵呵,对于我们来说就是免费的).嵌入式关系型数据库,省去了专用于关系型数据库管理系统日常费用,它没有独立运行的进程,它与所服务的应用程序在应用程序进程空间内共生共存.这样的数据库正是我所需要的. 终于又捡起了Delphi,安装的是lsuper.Delphi.XE4.RTM

delphi 中 delete的用法

delete 是删除一个 字符串中的 某部分字符用法是 delete(str,//被删除的字符串               index,//从第几个字符开始删除              count //删除几个              );Delete(S, 2, 2); 就是从S中的第二个开始删除,删除2个字符即2.3. Delphi Help: var s: string; begin   s := 'Honest Abe Lincoln';   Delete(s,8,4);   Ca

Delphi 中 TStrings 一些用法

Delphi TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delimiter & DelimitedText 3.Names & values & valueFromIndex 先看第一个:CommaText.怎么用呢?用代码说话: const constr :String = 'aaa,bbb,ccc,ddd'; var strs :T

Delphi中ClientDataSet的用法小结

TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进行操作处理的接口和功能,而本身并不依赖上述几种数据库驱动程序,基本上能满足单机"瘦"数据库应用程序的需要. 一.TClientDataSet的基本属性和方法介绍 1.FieldDefs: 字段定义列表属性 开发者可通过单击属性编辑器中该属性编辑按钮,或在该控件上单击右键选择弹出菜单中的"Fields Editor"菜单进

delphi中webbrowser的用法

WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForward; //前进 WebBrowser1.Navigate('...'); //打开指定页面 WebBrowser1.Navigate('about:blank'); //打开空页面 //打开空页面, 并写入... WebBrowser1.Navigate('about:<head><ti

DELPHI中MessageBox的用法 (转)

MessageBox对话框 输入控件的   ImeName属性把输入法去掉就默认为英文输入了 MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容.信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框. 1.函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer