《linux核心分析》課程第一次作業
程式的正確執行靠堆疊來維持,堆疊是一塊儲存資料的連續記憶體。乙個名為堆疊指標(esp)的暫存器指向堆疊的頂部,乙個名為堆疊指標(ebp)的暫存器指向堆疊的底部。堆疊的底部在乙個固定的位址。堆疊的大小在執行時由核心動態地調整。cpu實現指令push和pop, 向堆疊中新增元素和從中移去元素,而且要注意的是堆疊是向低位址增長的。
下面我們通過乙個簡單的例子來說明程式是如何執行的:
為了理解程式在呼叫時都做了哪些事情, 我們使用gcc的-s選項編譯, 以產生彙編**整理輸出:
一些彙編**簡單說明 :
(main函式)
(f函式)
(g函式)
總結:儲存程式
計算機工作流程就是eip不停地取出指令讓cpu去執行,函式的呼叫通過堆疊來實現。看似乙個簡單c程式也需要經過編譯鏈結之後才能生成可執行程式,這其間的複雜程度遠遠超出我們的想象。
程式執行的記憶體分析過程
1.將show方法存入方法區,構造person方法,初始化變數name age,構造方法移出棧 2.給main方法建立乙個棧,給name,age分別賦值,呼叫show方法,此時將物件的位址0x10傳遞給p1,p1.show 棧被移出 3.再次構造person方法,初始化變數name age,構造方法...
程式執行的過程分析 sky原創
程式執行的過程 比如我們要執行3 2 程式計數器 pc 指令位址 指令暫存器 ir 正在執行的命令 累加器 ac 臨時儲存體 那麼實際上執行了三條指令 每條指令又分為兩部分 取址 執行 取址就是從暫存器裡取一條指令放在ir暫存器 左上角的圖,pc暫存器裡面放的值是300 那麼我們就從記憶體位址為30...
Java 程式執行過程的記憶體分析
記憶體分析先知 棧 1 每個執行緒私有,不能實現執行緒間的共享!2 區域性變數放置於棧中。3 棧是由系統自動分配,速度快!棧是乙個連續的記憶體空間!堆 1 放置new出來的物件!2 堆是乙個不連續的記憶體空間,分配靈活,速度慢!方法區 1 被所有執行緒共享!2 用來存放程式中永遠不變或唯一的內容。類...