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

C在运行时是怎么处理function中所占memory的?

尚未結案
winsnowlove
一般會員


發表:10
回覆:7
積分:3
註冊:2004-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-11 16:47:32 IP:211.160.xxx.xxx 未訂閱
C在运行时是怎么处理function中所占memory的? 如在以下program中: main() { S1; for(...){ foo(); } S2; } foo() { int a,b;//S3 ... } a,b所占用Memory的分配时间有两种情况: 1、每次执行到进入foo()时才分配a,b的Memory。 2、一开始把整个program调入Memory,开始执行时就分配好,只是在S1,S2处不可access,只有进入foo()以后才可access。 虽然从High level language的角度说,这两种情况的效果相同:在foo()外a,b都不可用。但是深入到机器码的层次,情况还是有区别的。 如果是第一种情况,每次Call子程序foo()时系统都要为a,b分配Memory,需要时间开销不算,最主要的是运行时间长了会造成很多Memory的Fragment,使得运行越来越慢。这在一般的Application没什么关系,但是对于需要长时间连续运行的Application(如电信上)会有严重问题。 如是第二种情况,在运行时Application占用的系统Memory是固定的(利用malloc和new动态分配的除外),Memory总量可能要大于第一种情况。 这个问题可能与Compiler有关,不同的Compiler有不同的情况? 發表人 - winsnowlove 於 2005/01/11 17:19:24 發表人 - winsnowlove 於 2005/01/11 18:01:58
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-11 21:04:00 IP:211.76.xxx.xxx 未訂閱
winsnowlove你好: local variable的空間都是在stack中的,一般產生一個local variable,不會用"配置"(allocate)這個詞,因為實作的時候組合語言碼只有一個指令:改變指向stack top的register,空間就出來了。反之不用的時候,也是改變該register,空間就回去。這部分的運作沒有你提到的那麼複雜,更沒有memory fragment的問題,對執行效率也沒什麼影響。 相關的主題參考組合語言的書,應該有詳細的說明。
系統時間:2024-06-19 0:57:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!