呼叫Function的代價_意指? |
答題得分者是:carstyc
|
yensj
一般會員 ![]() ![]() 發表:16 回覆:13 積分:5 註冊:2008-09-25 發送簡訊給我 |
小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間,
關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價 小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向, 感謝 |
carstyc
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
現在的高階程式語言,幾乎都已經不會去考慮這種『呼叫function的代價』了吧
用簡單的說法 程式在執行時都會有一個指標指著現在程式執行到那個位置,當你呼叫副程式時,CPU就要先把現在執行的位置,先放進堆疊暫存器中,然後程式再指向到副程式的起始位置,然後開始執行副程式。執行完成後,又要從堆疊暫存器那裡去把剛剛執行到那裡的位置資料取出來,然後再回到剛剛的位置再繼續執行。 你教授講的『呼叫function的代價』,應該就是指處理這些程式跳來跳去所花費的時間吧。 不過以現在電腦的速度,快到實在可以讓人忽略這種微不足道的時間。 所以我猜,要嘛你的論文太要求即時性。或是另一個可能就是你們教授太『龜X』 無論如何...還是祝好運... ===================引 用 yensj 文 章=================== 小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間, 關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價 小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向, 感謝 |
yensj
一般會員 ![]() ![]() 發表:16 回覆:13 積分:5 註冊:2008-09-25 發送簡訊給我 |
還在念大學=.=,是做跟指紋相關的專題,在performance這部分遇到難關了。
小弟大概了解意思了,這部分在跟教授討論看看, 感謝carstyc 大的回覆。 ===================引 用 carstyc 文 章=================== 現在的高階程式語言,幾乎都已經不會去考慮這種『呼叫function的代價』了吧 用簡單的說法 程式在執行時都會有一個指標指著現在程式執行到那個位置,當你呼叫副程式時,CPU就要先把現在執行的位置,先放進堆疊暫存器中,然後程式再指向到副程式的起始位置,然後開始執行副程式。執行完成後,又要從堆疊暫存器那裡去把剛剛執行到那裡的位置資料取出來,然後再回到剛剛的位置再繼續執行。 你教授講的『呼叫function的代價』,應該就是指處理這些程式跳來跳去所花費的時間吧。 不過以現在電腦的速度,快到實在可以讓人忽略這種微不足道的時間。 所以我猜,要嘛你的論文太要求即時性。或是另一個可能就是你們教授太『龜X』 無論如何...還是祝好運... ===================引 用 yensj 文 章=================== 小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間, 關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價 小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向, 感謝 |
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我也來插花補充一下 ^_^
呼叫function時額外還會"花費"把參數push進stack的時間。 此外,在function開跑前會需要做一些準備,就如樓上所言…想要深入了解多一點。建議要看一下組合語言。還有,開跑前的準備叫prologue,善後的部份叫epilogue。 可依上面的資料自己查書或goolgle一下。 又想到一點補充,若你覺得function有點點點點小貴的花費,那你可以使用 inline function (c 的語法),它就是定義的時候看起來像function,方便寫程式時的管理,但實值上compile時是以"置換"的方式把function的code插入相對的位址。有興趣也是google一下囉!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
carstyc
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
感謝 aftcast 大大的補充
記得很久很久以前,好像還是286的時代,那一門課也忘了,老師跟同學們就是針對這種『要不要用副程式』的問題激辯了很久。 不用副程式,直接用 inline function (組合語言裡面是用 巨集),優點就是省去這種跳來跳去的時間,執行速度一定就比較快。 但一個程式中如果有數百個地方要用到,程式在complier 後,就會有數百處一模一樣的程式碼。光執行檔的大小就會增加很多。 這個時候用副程式的方式,就能把程式的size縮到比較小,付出的代價就是程式執行上比較慢一點點。 在以前用磁碟片開機,主程式只能用640k的年代,程式多個幾k,就非常的要不得了。 可是曾幾何時,現在一個作業系統用一片VCD還不夠裝,電腦的執行速度也是快到嚇死人,硬碟都是算T的。 現在去計較『呼叫Function成本』,似乎只剩下學術單位才會幹這種事吧,畢竟是練基本功。 業界的老闆應該只會說,我他媽的管你要不要呼叫Function,你明天給我寫出來就對了,寫不出來今天別給我下班。 還是老話,老闆想要啥就給他啥,祝好運...呵呵... ===================引 用 aftcast 文 章=================== 我也來插花補充一下 ^_^ 呼叫function時額外還會"花費"把參數push進stack的時間。 此外,在function開跑前會需要做一些準備,就如樓上所言…想要深入了解多一點。建議要看一下組合語言。還有,開跑前的準備叫prologue,善後的部份叫epilogue。 可依上面的資料自己查書或goolgle一下。 又想到一點補充,若你覺得function有點點點點小貴的花費,那你可以使用 inline function (c 的語法),它就是定義的時候看起來像function,方便寫程式時的管理,但實值上compile時是以"置換"的方式把function的code插入相對的位址。有興趣也是google一下囉! |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
yensj
一般會員 ![]() ![]() 發表:16 回覆:13 積分:5 註冊:2008-09-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |