虛擬地址空間佈局和編譯連結執行原理
阿新 • • 發佈:2018-12-22
一、
利用中間層訪問實體記憶體,一是提高了記憶體使用效率和最優分配,二是提高了安全性。中間層又被稱作虛擬地址空間,由此一來,程式訪問的不再是實際的實體記憶體地址,而是訪問虛擬地址,作業系統再將虛擬地址對映到實體記憶體上;linux系統下虛擬地址空間是這樣劃分的:
.data段和.bss段統稱為資料段,不同之處為:
.data段存放已初始化且初始化不為0的資料
.bss段存放未初始化或初始化為0的資料
二、
編譯執行一個hello world.c程式,它會在很短的時間內輸出一個”hello world”,但是計算機把其中的幾個步驟隱藏了,並沒有像我們展示,分別是:預編譯-> .i、編譯-> .s、彙編-> .o、連線、生成可執行檔案-> .exe。
這幾個步驟的詳細工作為:
預編譯:
處理與編譯指令(#define #include #if #elif )、新增行號和檔案表示、刪除註釋、#pragma
編譯:
詞法分析、語法分析、語義分析、程式碼優化
彙編:
把指令翻譯成二進位制
連結:
合併段和符號表、符號解析、分配地址和空間、符號重定位
生成可執行檔案:
建立虛擬地址空間到實體記憶體的對映(建立核心對映結構體)、建立頁目錄和頁表、
載入指令和資料、程式的入口地址寫入PC暫存器