[英]return by value function optimization
樣本功能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
消失了。 但是我無法理解這種行為的原因。
在function2中的THEORY中,將啟動局部變量(這將占用更多空間),然后將計算計算並將值復制到變量的位置。
之后,副本將被復制到返回值。 因此,這是一個額外的復制操作。
在REALITY中,編譯器會在編譯時進行優化,並且如果不需要使用不需要的變量,則將其刪除。 (重構)
這是有關編譯器中返回值優化的一些詳細信息。
嘗試使用具有非平凡的復制構造函數的類,以查看實際發生的情況。
絕對沒有區別。 任何編譯器都可以看到代碼只是
int main(){func_xyz(20); }
被調用的函數做什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.