函数返回值时为什么要把值放在临时变量里面呢?为什么不能直接复制给变量
为什么没人回答我的问题呢
比如 int fun(int i) { int j=i*2; return j; }
j是在fun函数内创建的变量,当函数结束时,该变量就释放了, 所以要把变量j的值传递给一个临时变量,通过临时变量赋值给其他变量.
函数返回值时为什么要把值放在临时变量里面呢?为什么不能直接复制给变量 ————————————————————————————————————————— 这恐怕是个优化问题。毕竟你说的“复制给变量”仅是函数应用的一部分。
比如:int func(){return 0;}
int i; i = func();
想要在 func中 return 0;时 将0的值直接复制给 i,那么首先得要知道 i的地址吧~ 不过就目前的信息来看 i的地址 你在 func中无从得知; 所以 将放回值存放到一个临时变量中或者寄存器中,当func执行结束后,程序返回到段口地址 继续执行未完的code~ 也就是 i=func() 这个赋值语句,再将临时存储起来的值复制给i,这样做自然合理
不好说 ,两者皆有可能
更准确一点说: i=func() 是分两步的;
1.执行func函数得到结果; 2.执行 i=func()这个赋值语句,将结果赋予i;
func 中的ret 语句 和 i=func 赋值语句 之间 处理器还有一些附加的动作要完成~ 不如释放 函数栈~ 转换cs:ip寄存器来指向段口地址,恢复现场等等, 所以ret和 i=func 不可能相继执行~ 所以就更需要 将 func 中要 ret的结果临时保留起来了
保存给临时变量~ 还因为 返回的函数结果可能不付给任何人;
func();
|