[英]Execution time between functions with & without arguments C/C++
我只想問以下情況下執行時間有何不同?
a)我們在main()
聲明了變量,並使用參數在函數中將其發送
b)我們有全局變量,可以直接從不帶參數的函數中訪問它們
關鍵是我開始編寫一些Aps,並且看到了一些有關此的討論,但是我還沒有編寫任何使兩者之間的差異大幾毫秒的應用程序。
將參數傳遞給函數通常涉及以下兩個匯編程序指令之一: push param
(和后來的pop param
)或mov ax, param
。 由於處理器能夠在一秒鍾內完成更多(很多)操作,因此這種“優化”很可能不會被注意到(整個程序的幾毫秒低於錯誤余量)
使用全局變量代替函數參數會導致代碼混亂,幾乎不會引起注意,甚至可能不會提高性能。
所有這些取決於所使用的CPU和編譯器。
當您將參數傳遞給函數時,可能會發生以下情況之一:
使用全局變量將比使用堆棧快得多。 它絕對比使用CPU寄存器快:在函數內部,無論如何計算,可能需要將該值加載到此類寄存器中。
應該注意的是,我們在這里和那里談論的是幾個CPU滴答聲。
我的建議:
堆棧操作非常高效,由於堆棧可能位於高速緩存中,因此它們的工作效率更高。 這可能會使使用堆棧比不使用堆棧更快。
期望參數傳遞的變量比全局變量快很多。 在現代ABI中,大多數使用CPU寄存器傳遞功能參數,而CPU寄存器可立即使用。
全局變量必須從(靜態)內存中讀取。 更糟糕的是,靜態內存是在其自己的內存頁面上分配的,該頁面通常離您的堆棧(或堆)內存很遠。 這意味着高速緩存未命中的可能性更高,這又意味着訪問可能消耗大量CPU周期。
顯然,這很大程度上取決於您的使用模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.