社区
语言基础/算法/系统设计
帖子详情
关于 Var 和 Result!!
lynchhei
2014-07-21 02:02:29
procedure proA(var A: Integer);
begin
Inc(A);
end;
function proB(A: Integer): Integer;
begin
Result := Inc(A);
end;
求问哪个函数效率要高那么一点点?
...全文
231
3
打赏
收藏
关于 Var 和 Result!!
procedure proA(var A: Integer); begin Inc(A); end; function proB(A: Integer): Integer; begin Result := Inc(A); end; 求问哪个函数效率要高那么一点点?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
明空皓月
2014-07-25
打赏
举报
回复
第一种直接操作A得到结果,第二种要重新开辟内存并复制一份数据操作,效率肯定不如第一种。 二楼挺详细的
武稀松
2014-07-21
打赏
举报
回复
procedure proA(var A: Integer); begin Inc(A); end; function proB(A: Integer): Integer; begin Inc(a); Result := A; end; 第一个效率要高一点点,第二个函数一开始的的begin会被编译到如下结果 产生一个integer类型的局部变量,然后把非var,const,out的参数的内容传给局部变量. 以后使用的A实际上是这个局部变量.除非你的A声明成var 然后还要再把A复制到返回值中. 也就是多了两次复制动作. 你这个例子效率差得还不太明显 如果你的A是比较大的数据结构,比如结构体效率差别更明显 比如 procedure proA(var A: TImageDosHeader); begin inc(a.e_cblp); end; 产生的代码 inc(a.e_cblp); 005D7338 66FF4002 inc word ptr [eax+$02] Unit4.pas.28: end; 005D733C C3 ret function proB(A: TImageDosHeader): TImageDosHeader; begin inc(a.e_cblp); Result := A; end; 产生的代码 005D7340 56 push esi 005D7341 57 push edi 005D7342 83C4C0 add esp,-$40 //开辟64个字节的局部变量 005D7345 8BF0 mov esi,eax 005D7347 8D3C24 lea edi,[esp] 005D734A B910000000 mov ecx,$00000010 //告诉ecx,复制次数 005D734F F3A5 rep movsd //重复复制ecx($10)次,每次复制4个字节,也就是64个字节,把参数复制到局部变量 Unit4.pas.32: inc(a.e_cblp); 005D7351 66FF442402 inc word ptr [esp+$02] Unit4.pas.33: Result := A; 005D7356 8BFA mov edi,edx 005D7358 8BF4 mov esi,esp 005D735A B910000000 mov ecx,$00000010 //告诉ecx,复制次数 005D735F F3A5 rep movsd //重复复制ecx($10)次,每次复制4个字节,也就是64个字节,把局部变量复制到返回值 Unit4.pas.34: end; 005D7361 83C440 add esp,$40 005D7364 5F pop edi 005D7365 5E pop esi 005D7366 C3 ret
luxuewei5214
2014-07-21
打赏
举报
回复
我自己用后面一种多些,除非返回值有多个才用前面的方法,效率的话,说不上来谁好谁坏
js 判断对象是否为空字符串
var
ageForCheckbox;...
var
result
= !ageForCheckbox || parseInt(ageForCheckbox) console.log("
result
= " +
result
); //true
var
ageForCheckbox = null; // 空
var
result
= !ageForCheckbox || pa
Python实现向量自回归(
VAR
)模型——完整步骤
1. 首先啥是
VAR
模型,我这里简略通俗的说一下,想看代码的童鞋直接跳到第3部分就好了: 以金融价格为例,传统的时间序列模型比如ARIMA,ARIMA-GARCH等,只分析价格自身的变化,模型的形式为: 其中称为自身的滞后...
JS中!!的用法
var
o={flag:true};
var
test=!!o.flag;//等效于
var
test=o.flag||false; alert(test); 由于对null与undefined用!操作符时都会产生true的结果, 所以用两个感叹号的作用就在于, 如果明确设置了o中flag的值(非 ...
【Kettle】 kettle 循环执行作业
var
prevRow=previous_
result
.getRows();//获取上一个传递的结果,数据库中查询的结果集 if (prevRow == null &&(prevRow.size()=0)) { false; }else{ parent_job.set
Var
iable("tables", prevRow);//ArrayList存储...
js判断一段字符串中某字符出现的个数
问题点 str为某字符串 char为某字符 ...
var
result
= str.match(regex);//match方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
var
count=!
result
? 0 :
result
.length; return coun.
语言基础/算法/系统设计
16,749
社区成员
33,245
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章