函数的传值调用快还是传址调用快?

bluetree 2001-06-12 05:19:00
加精
函数的传值调用快还是传址调用快?为何好多书上说传址调用快,但我验证的结果并非如此。
...全文
400 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
gojun 2001-06-20
  • 打赏
  • 举报
回复
上当了吧,呵呵!
fossil2000 2001-06-18
  • 打赏
  • 举报
回复
为什么不加分!!!!!
yechun 2001-06-15
  • 打赏
  • 举报
回复
o
GRIEG 2001-06-15
  • 打赏
  • 举报
回复
那为什么不加分
bluetree 2001-06-14
  • 打赏
  • 举报
回复
to fossil2000() :在我的机器上,稍微修改了一下程序:(我用bc++5.02)
#include <time>
#include <iostream>
typedef struct str
{
int a1;
int a2;
int a3;
} STR;
void function1(STR x);
void function2(STR &x);
main()
{
struct str xx;
xx.a1=19;
xx.a2=23;
xx.a3=34;// 此数随便取就是
clock_t start1,start2,end1,end2;

for(long n=1000;n<1000000000;n=n*10)
{
start1=clock();
for(long i=0;i<=n;i++)
function1(xx);
end1=start2=clock();
for(long i=0;i<=n;i++)
function2(xx);
end2=clock();
cout<<"\n if n="<<n<<endl;
cout<<"Function1 use time is "<<(end1-start1)/CLK_TCK<<endl;
cout<<"Function2 use time is "<<(end2-start2)/CLK_TCK<<endl;
}
cin.get();
}
void function1(STR x)
{
int temp1;
temp1=x.a1;
x.a1=x.a2;
x.a2=x.a3;
x.a3=temp1;
}
void function2(STR &x)
{
int temp1;
temp1=x.a1;
x.a1=x.a2;
x.a2=x.a3;
x.a3=temp1;
}
结果的确传址快,thank!
另外,GRIEG(丁丁)说的也有道理。 
fossil2000 2001-06-14
  • 打赏
  • 举报
回复
我今天用程序摸拟了一个,程序大体如下:
struct str
{
int a1;
int a2;
int a3;
}
include "time.h"
main()
{
struct str xx;
xx.a1=19;
xx.a2=23;
xx.a3=34;// 此数随便取就是
long start1,start2,end1,end2;

for(long n=1000;n<1000000000;n=n*10)
{
start1=clock();
for(long i=0;i<=n;i++)
function1(xx);
end1=start2=clock();
for(i=0;i<=n;i++)
function2(xx);
end2=clock();
cout<<"\n if n="<<n<<endl;
cout<<"Function1 use time is "<<(end1-start1)/CLK_TCK<<endl;
cout<<"Function2 use time is "<<(end2-start2)/CLK_TCK<<endl;
}
}
void function1(struct str x)
{
int temp1;
temp1=x.a1;
x.a1=x.a2;
x.a2=x.a3;
x.a3=temp1
}
void function1(struct str &x)
{
int temp1;
temp1=x.a1;
x.a1=x.a2;
x.a2=x.a3;
x.a3=temp1
}
得到的结果如下:
n=100000
function1 use time 0.0549455
function2 use time 0
n=1000000
function1 use time 0.384615
function2 use time 0.10989
n=10000000
function1 use time 3.351648
function2 use time 0.989011
n=100000000
function1 use time 33.2967
function2 use time 9.835165
n=1000000000
function1 use time 330.384615
function2 use time 94.835165
从结果一看便知传地址快一些特别是数据量大时!
我用的是 TC++3。0 CPU是K6-2 350,主频是350M

bluetree 2001-06-13
  • 打赏
  • 举报
回复
理论上,我也知道是传址快,是不是我的测试方法不对?
nccpu 2001-06-13
  • 打赏
  • 举报
回复
当然是传址快!!!
fossil2000 2001-06-13
  • 打赏
  • 举报
回复
to bluetree 你的方法可能欠佳我想最好是在for中用函数调用来进行如下函数的操作:
funtion1(struct str1 x,struct str2 y);//传值调用
funtion2(struct str1 &x,struct str2 &y);//传地址
致于funtion中干些什么那就只要安排一下简单的运算, 不过在struct str 中的结构最好是复杂一点哟!在funtion中的调用最好是每一项都用到。程序通过后告诉我一声哟!
hello_wyq 2001-06-13
  • 打赏
  • 举报
回复
一般来说如果数据结构比较的大,应该是传递地址比较的快吧?
taosi 2001-06-13
  • 打赏
  • 举报
回复
传值的程序还有许多其他的操作,例如,进栈,出栈的操作。。

传址的可就没有了。。。
GRIEG 2001-06-13
  • 打赏
  • 举报
回复
对于类或结构当然是传地址快(或引用)
对于int类型(可能还有其他类型),由于是寄存器操作,当然是传值快,(不用读取内存了)
NowCan 2001-06-13
  • 打赏
  • 举报
回复
也许是编译器优化造成的。
wwwunix 2001-06-12
  • 打赏
  • 举报
回复
同意liu_feng_fly(一只菜鸟,忽忽悠悠的就飞来了!!)
NowCan 2001-06-12
  • 打赏
  • 举报
回复
传址快,传值还要复制一遍呢。
liu_feng_fly 2001-06-12
  • 打赏
  • 举报
回复
传值还有一个把实参作一个拷贝再传给函数的过程,当然慢些
bluetree 2001-06-12
  • 打赏
  • 举报
回复
to 毛头:这么测有生么不好?本人学c++不长,请教一下,别呵呵。
xiangqian 2001-06-12
  • 打赏
  • 举报
回复
传址快啊,微观上电路走的也少嘛
acute 2001-06-12
  • 打赏
  • 举报
回复
这么测啊————,我倒~~~~呵呵
bluetree 2001-06-12
  • 打赏
  • 举报
回复
to fossil2000():我编写了一个用for循环遍例数组的函数(borland C++5.02),用time()函数测试循环执行1000000次的时间,结果传值调用快得多。
加载更多回复(2)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧