簡體   English   中英

按值返回函數優化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM