首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按值函数优化

按值函数优化
EN

Stack Overflow用户
提问于 2011-02-10 19:55:59
回答 3查看 209关注 0票数 1

样本函数1

代码语言:javascript
复制
int func1 (int arg)  
{  
   return arg + 10;  
}

样本函数2

代码语言:javascript
复制
int func1 (int arg)  
{  
   int retval = arg + 10;  
   return retval;  

}

代码语言:javascript
复制
func_xyz (int x);  

int main ()  
{  
int a = 10;  
int p = func1 (a);  

func_xyz(p);  
}  

这些函数的运行时行为(示例1和示例2)有什么区别吗?

我的代码中有一个函数定义,它使用示例1样式的函数定义。当我调用这个函数时,有一百万次(在较少的迭代中不能复制),并试图将这个值传递给func_xyz,我将得到一个segfault。然而,当我使用示例2样式定义时,segfault就会消失。但我无法理解这种行为的原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-10 20:13:03

理论中,在function2中将启动一个局部变量(这将占用更多的空间),然后计算计算,并将值复制到变量的位置。

之后,复制将复制到返回值。所以这是一个额外的复制操作。

REALITY中,编译器在编译时进行优化,如果不实际使用它们的值,则删除不需要的变量。(重构)

票数 2
EN

Stack Overflow用户

发布于 2011-02-10 20:22:10

下面是关于编译器中的返回值优化的一些细节。

尝试使用具有非平凡复制构造函数的类来查看实际发生的情况。

票数 1
EN

Stack Overflow用户

发布于 2011-02-10 20:23:31

这绝对没有区别。任何编译器都可以看到代码只是

int main() { func_xyz(20);}

被调用的函数是做什么的?

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

https://stackoverflow.com/questions/4961944

复制
相关文章

相似问题

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