首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Delphi中函数重载有运行时开销吗?

在Delphi中函数重载有运行时开销吗?
EN

Stack Overflow用户
提问于 2010-09-29 03:07:24
回答 2查看 722关注 0票数 7

调用重载函数是否有额外的运行时开销?

(我专门针对Delphi提出这个问题,以防所有编译语言的答案都不一样)

我不认为这应该在编译时解决,但你永远不能确定,不是吗?

EN

回答 2

Stack Overflow用户

发布于 2010-09-29 03:16:20

您当然可以确定,因为它是documented。是在编译时解析它的编译器,因此在Delphi中调用重载函数不会产生额外的开销。

编辑

我给你做了个小测试:

代码语言:javascript
复制
var
  j: Integer;
  st: string;

procedure DoNothing(i: Integer); overload;
begin
  j := i;
end;

procedure DoNothing(s: string); overload;
begin
  st := s;
end;

procedure DoNothingI(i: integer);
begin
  j := i;
end;

procedure TForm2.Button1Click(Sender: TObject);
const
  MaxIterations = 10000000;
var
  StartTick, EndTick: Cardinal;
  I: Integer;
begin
  StartTick := GetTickCount;
  for I := 0 to MaxIterations - 1 do
    DoNothing(I);
  EndTick := GetTickCount;
  Label1.Caption := Format('Overlaod ellapsed ticks: %d [j:%d]', [EndTick - StartTick, j]);
  StartTick := GetTickCount;
  for I := 0 to MaxIterations - 1 do
    DoNothingI(I);
  EndTick := GetTickCount;
  Label1.Caption := Format('%s'#13'Normal ellapsed ticks: %d [j:%d]', [Label1.Caption, EndTick - StartTick, j]);
end;

结果:在我的dev机器上,几乎所有的时间都是31刻度(毫秒),有时重载只需要16刻度。

票数 19
EN

Stack Overflow用户

发布于 2010-09-29 14:00:16

重载是在编译时解决的(没有开销),但是重载有开销!virtualdynamic

http://docwiki.embarcadero.com/RADStudio/en/Methods

虚拟与动态

在Delphi for Win32中,虚拟方法和动态方法在语义上是等价的。

然而,它们在运行时方法调用调度的实现上有所不同:虚方法优化速度,而动态方法优化代码大小。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3816178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档