0
A
回答
0
您需要明確您是否關心程序大小或運行時內存使用情況(堆棧與寄存器)。此外,對於每個呼叫站點固有地具有相當一部分工作的任何功能,從程序大小的角度來看,從內聯獲得的微不足道的好處是不明顯的。對於任何固有需要使用大量內存的函數 - 對於一個球場感覺數字表示超過一百個字節 - 內聯或不內聯不會有任何區別。但是,「固有地」編碼這樣的事實,即每個呼叫站點可能具有不同的實際需求,所以如果特定呼叫站點的需求的編譯時間確定允許顯着的優化機會(例如 - 無效代碼消除),則內聯可以提供幫助。
內聯函數在被調用的每個點被有效地替代,然後進行優化 - 優化可能會改變它們使用的寄存器和內存 - 無論您是指用於機器代碼指令(即程序)的內存,還是用於堆棧與寄存器。諸如死代碼消除之類的優化 - 以及該代碼隱含的內存使用 - 對於一個調用者可能是可能的,但不是另一個調用者,但是如果在調用一個脫機函數時沒有執行該代碼分支,則不太可能有太多無論如何,內存使用的差異。根據函數的大小,在內聯後通常會發生多少優化,有多少個呼叫站點,需要多少代碼來準備和傳遞參數,這兩種方法都可能產生收益總體代碼差不多膨脹。隨着inling的出現,代碼膨脹的風險會更高,但編譯器通常會在超出合理閾值時選擇不遵守「inline」關鍵字提示。
與大多數優化選項一樣,如果你關心你應該爲你的具體應用測量真實的數據/事件負載。
相關問題
- 1. boost ::函數內存使用情況
- 2. 比較std :: sort()中的內聯函數
- 3. PHP - 將普通函數內聯匿名函數
- 4. 通過Python函數跟蹤*最大*內存使用情況
- 5. Python:通過函數最小化內存使用情況
- 6. 虛函數內聯函數會發生什麼情況?
- 7. 如何使用jQuery.Deferred和普通函數?
- 8. 計數函數內的情況條件
- 9. 內聯函數和靜態內聯函數之間的區別
- 10. 遞歸函數的內存使用情況
- 11. Azure函數內存/消耗單元的使用情況
- 12. 如何在PHP中記錄內置函數的使用情況?
- 13. 內聯函數
- 14. 內聯函數
- 15. 內聯函數
- 16. 通過函數指針使用的函數可以內聯嗎?
- 17. 如何比較Linux和Windows上的應用程序內存使用情況?
- 18. 比較.Net和VB6應用程序的內存佔用情況
- 19. 如何在渲染函數內使用if進行比較
- 20. C++中構造函數和析構函數的內聯使用
- 21. Postgresql和內聯函數
- 22. 互斥和內聯函數
- 23. C,內聯函數和GCC
- 24. get/set函數和內聯
- 25. 核心數據內存使用情況和內存警告
- 26. 內聯函數在其他內聯函數用C
- 27. 內聯函數調用靜態內聯函數
- 28. 聯動的內聯函數
- 29. 在這種情況下,內聯函數的宏是什麼?
- 30. Callgrind內聯函數
看看你的可執行文件的大小。 –
ok ..通過比較兩個可執行文件... ryt ?? ty .. @ DidierTrosset – kernel
Ok..compiler將永遠具有足夠的智能,可以正確地選擇它。 – kernel