C在运行时是怎么处理function中所占memory的? |
尚未結案
|
winsnowlove
一般會員 發表:10 回覆:7 積分:3 註冊:2004-11-20 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |