2012-12-04 44 views
0

我想知道如何查找函數在用作內聯函數和普通函數時使用的內存量,以使函數的使用效率更高。如何比較內聯函數和普通函數的內存使用情況?

我想計算兩種情況下確切的內存使用情況。

+0

看看你的可執行文件的大小。 –

+0

ok ..通過比較兩個可執行文件... ryt ?? ty .. @ DidierTrosset – kernel

+0

Ok..compiler將永遠具有足夠的智能,可以正確地選擇它。 – kernel

回答

0

您需要明確您是否關心程序大小或運行時內存使用情況(堆棧與寄存器)。此外,對於每個呼叫站點固有地具有相當一部分工作的任何功能,從程序大小的角度來看,從內聯獲得的微不足道的好處是不明顯的。對於任何固有需要使用大量內存的函數 - 對於一個球場感覺數字表示超過一百個字節 - 內聯或不內聯不會有任何區別。但是,「固有地」編碼這樣的事實,即每個呼叫站點可能具有不同的實際需求,所以如果特定呼叫站點的需求的編譯時間確定允許顯着的優化機會(例如 - 無效代碼消除),則內聯可以提供幫助。

內聯函數在被調用的每個點被有效地替代,然後進行優化 - 優化可能會改變它們使用的寄存器和內存 - 無論您是指用於機器代碼指令(即程序)的內存,還是用於堆棧與寄存器。諸如死代碼消除之類的優化 - 以及該代碼隱含的內存使用 - 對於一個調用者可能是可能的,但不是另一個調用者,但是如果在調用一個脫機函數時沒有執行該代碼分支,則不太可能有太多無論如何,內存使用的差異。根據函數的大小,在內聯後通常會發生多少優化,有多少個呼叫站點,需要多少代碼來準備和傳遞參數,這兩種方法都可能產生收益總體代碼差不多膨脹。隨着inling的出現,代碼膨脹的風險會更高,但編譯器通常會在超出合理閾值時選擇不遵守「inline」關鍵字提示。

與大多數優化選項一樣,如果你關心你應該爲你的具體應用測量真實的數據/事件負載。