首先宣告兩條,這兩條很重要,下面的所有過程都將以這兩條為基礎:
1、程式中每執行乙個方法都將在記憶體中建立乙個棧,執行完棧消失;
2、程式中每執行乙個new都將在堆中建立乙個物件。
執行main生成乙個棧,為敘述方便記為棧1(下同),
test test = new test(); //在堆中生成test物件,
int date = 9; //棧1中開闢4 個位元組空間date存入9,
birthdate d1 = new birthdate(7,7,1970); //在堆中生成物件d1存入(7,7,1970),
birthdate d2 = new birthdate(1,1,2000); //在堆中生成物件d2存入(1,1,2000),
test.change1(date); //生成棧2存入date並賦值1234,執行完這條後該
棧消失,因此沒改變棧1中的date,
test.change2(d1); //該方法(有乙個new生成乙個新物件b)生成棧3
存入b的位址,執行完這條後該棧消失,因此沒改變堆中的d1,
test.change3(d2); //該方法(內有乙個類方法生成棧5存入22並賦給
d2中的day,即d2已更新為(22,1,2000))執行
產生棧4執行完棧4消失(棧5也同時消失),
......
public void change1(int i)
public void change2(birthdate b)
public void change3(birthdate b)
point p1 = new point(double x,double y) //方法結束棧6消失
在記憶體中啟動EXE程式(過程詳解)
這個檔案可加密,開啟檔案的同時解密成exe檔案即可。char szfilename virus.exe handle hfile createfile szfilename,generic read generic write,file share read file share write,nul...
程式在記憶體空間中的布局
下面1.段 text 也叫正文段,cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常環境指標環境表環境字串執行的程式 如文字編輯程式 c編譯程式 shell等 在儲存器中也只需有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改其自身的指令。2.初始化過的資料段 data...
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...