大龙的博客

常用链接

统计

最新评论

test(int& n){略} 比test(int n)效率

test(int& n){略} 比test(int n){略} 这个效率一样,但是一般int这些并非类或者结构型变量是不用引用传址的,除非你要修改传过来的n在原函数中的值.因为引用传址传的是一个指针,系统中是一个push一个pop两个指令,int也是两这个指令,效率相同.

但是结构或者类若不是引用传址,系统会先在栈里分配一个临时变量出来,然后在进行调用类的构造函数,再把成员变量进行赋值,等该函数返回后还要进行调用析构函数,这样就会使本来很简单的工作出现很多无用功,导致程序效率下降.


从汇编也可以看出是否产生了临时变量

posted on 2009-09-25 00:45 大龙 阅读(287) 评论(1)  编辑 收藏 引用

评论

# re: test(int& n){略} 比test(int n)效率 2009-09-25 09:48 陈梓瀚(vczh)

不一样,变量在指令里面你知道的都是一些地址。test(int&)的时候你直接
lea eax, [ebp+?]
push eax
而test(int)的时候你却需要
mov eax, [ebp+?]
push eax
调用的时候显然引用快一点
--------------------------------------
但是
--------------------------------------
test里面使用的情况就不一样了。假设这个时候参数的地址是ebp+??,那么我执行一个赋值,test(int&)需要
mov eax, [ebp+??]
mov eax, [eax]
而test(int)只需要
mov eax, [ebp+??]
显然,对于test里面参数只是用一次的情况下引用会慢一点点,但是大量使用的情况下呢,引用的开销就越来越大了
--------------------------------------
所以
--------------------------------------
它们的差别还是很大的  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理