線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5367
推到 Plurk!
推到 Facebook!

呼叫Function的代價_意指?

答題得分者是:carstyc
yensj
一般會員


發表:16
回覆:13
積分:5
註冊:2008-09-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-22 22:19:15 IP:218.162.xxx.xxx 訂閱
小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間,
關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價
小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向,
感謝
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-23 20:52:39 IP:219.84.xxx.xxx 訂閱
現在的高階程式語言,幾乎都已經不會去考慮這種『呼叫function的代價』了吧


用簡單的說法

程式在執行時都會有一個指標指著現在程式執行到那個位置,當你呼叫副程式時,CPU就要先把現在執行的位置,先放進堆疊暫存器中,然後程式再指向到副程式的起始位置,然後開始執行副程式。執行完成後,又要從堆疊暫存器那裡去把剛剛執行到那裡的位置資料取出來,然後再回到剛剛的位置再繼續執行。

你教授講的『呼叫function的代價』,應該就是指處理這些程式跳來跳去所花費的時間吧。

不過以現在電腦的速度,快到實在可以讓人忽略這種微不足道的時間。

所以我猜,要嘛你的論文太要求即時性。或是另一個可能就是你們教授太『龜X』

無論如何...還是祝好運...


===================引 用 yensj 文 章===================
小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間,
關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價
小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向,
感謝
yensj
一般會員


發表:16
回覆:13
積分:5
註冊:2008-09-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-24 00:16:38 IP:218.162.xxx.xxx 訂閱
還在念大學=.=,是做跟指紋相關的專題,在performance這部分遇到難關了。

小弟大概了解意思了,這部分在跟教授討論看看,

感謝carstyc 大的回覆。

===================引 用 carstyc 文 章===================
現在的高階程式語言,幾乎都已經不會去考慮這種『呼叫function的代價』了吧


用簡單的說法

程式在執行時都會有一個指標指著現在程式執行到那個位置,當你呼叫副程式時,CPU就要先把現在執行的位置,先放進堆疊暫存器中,然後程式再指向到副程式的起始位置,然後開始執行副程式。執行完成後,又要從堆疊暫存器那裡去把剛剛執行到那裡的位置資料取出來,然後再回到剛剛的位置再繼續執行。

你教授講的『呼叫function的代價』,應該就是指處理這些程式跳來跳去所花費的時間吧。

不過以現在電腦的速度,快到實在可以讓人忽略這種微不足道的時間。

所以我猜,要嘛你的論文太要求即時性。或是另一個可能就是你們教授太『龜X』

無論如何...還是祝好運...


===================引 用 yensj 文 章===================
小弟在跟教授討論時,有一些術語不太懂意思,情形大致如下,目前正在分析某一段程式執行的時間,
關於以下這段話,有些不了解 Question : 上述時間有多少是花在執行function內的程式碼? 有多少是花在呼叫function的代價
小弟不懂的是什麼是呼叫Function的代價,後來得到這樣的訊息,所謂"呼叫function的代價", 是只不論程式的內容為何, 作業系統為了執行"函式呼叫"必須做一些準備工作與善後工作所需的時間,小弟對此解釋仍然不能完全的理解,不知板上的前輩能否舉一些例子讓小弟有些思考方向,
感謝
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-24 11:23:00 IP:210.64.xxx.xxx 訂閱
我也來插花補充一下 ^_^

呼叫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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-24 11:58:49 IP:203.79.xxx.xxx 訂閱
感謝 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-08-24 12:13:45 IP:122.116.xxx.xxx 訂閱
不就是[空間換取時間]或是[時間換取空間]的取捨? ^_^
yensj
一般會員


發表:16
回覆:13
積分:5
註冊:2008-09-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-08-28 23:30:44 IP:220.136.xxx.xxx 訂閱
這禮拜有跟教授討論過了,感謝各位前輩寶貴的意見。
指紋辨識這部分對時間真的是斤斤計較,都快沒招式降低時間了=.=
系統時間:2024-04-25 15:28:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!