样本函数1
int func1 (int arg)
{
return arg + 10;
}样本函数2
int func1 (int arg)
{
int retval = arg + 10;
return retval;
}
func_xyz (int x);
int main ()
{
int a = 10;
int p = func1 (a);
func_xyz(p);
} 这些函数的运行时行为(示例1和示例2)有什么区别吗?
我的代码中有一个函数定义,它使用示例1样式的函数定义。当我调用这个函数时,有一百万次(在较少的迭代中不能复制),并试图将这个值传递给func_xyz,我将得到一个segfault。然而,当我使用示例2样式定义时,segfault就会消失。但我无法理解这种行为的原因。
发布于 2011-02-10 20:13:03
在理论中,在function2中将启动一个局部变量(这将占用更多的空间),然后计算计算,并将值复制到变量的位置。
之后,复制将复制到返回值。所以这是一个额外的复制操作。
在REALITY中,编译器在编译时进行优化,如果不实际使用它们的值,则删除不需要的变量。(重构)
发布于 2011-02-10 20:22:10
下面是关于编译器中的返回值优化的一些细节。
尝试使用具有非平凡复制构造函数的类来查看实际发生的情况。
发布于 2011-02-10 20:23:31
这绝对没有区别。任何编译器都可以看到代码只是
int main() { func_xyz(20);}
被调用的函数是做什么的?
https://stackoverflow.com/questions/4961944
复制相似问题