程序空間
首先認識程序和程式的區別1、程式:原始檔經過編譯,生成可執行檔案,一般window下是*.exe檔案,linux下是a.out。程式是靜態的。程式包含3個區域,text,inial data, uinial data。2、程序:被作業系統載入到記憶體至執行結束的過程。程序是動態的。程序包含5個區域,text,inial data, uinial data,heap,stack。
通過下面這這張圖可以更清晰的認識,程序和程式的區別。
接下來是分析程序空間簡概圖以乙個例項解析變數在程序空間的儲存區域全域性變數和靜態變數,如果賦初始值,儲存在data的inial的rw區域,放在.exe檔案裡面。如果沒有賦初始值,儲存在data的uninial的bss區,當 .exe被執行時,會呼叫命令將全域性變數和靜態變數初始化為0。區域性變數壓棧。
全域性變數的生命週期和main函式一樣長。
靜態變數只初始化一次。
函式壓棧與出棧
通過圖1、2、3進行形象解釋圖1左邊表示的是主函式會呼叫fa()函式,fa()函式會呼叫fb()函式,右邊表示程序空間壓棧情況圖1首先,將系統執行狀態壓棧,然後將返回位址壓棧;
然後將main函式引數壓棧,此時要先儲存main函式執行狀態,得到返回位址後才能把fa引數壓棧;
fa呼叫fb時和main呼叫fa時同理
圖2解析圖2表示fb呼叫完後要出棧,fb所包含的內容會被清空圖3表示的是最終狀態就是main執行結束後的狀態。
根據程序呼叫壓棧過程,很容易明白mn的值沒有進行交換的原因,因為swap壓棧後建立的a b變數壓棧,ab交換後,swap執行結束出棧,ab的值也會跟著消失,所以mn的值並沒有進行交換。
圖2void swap(int a,int b)
void main()
圖3
高階程式設計之程序(二)
進 程 1 程序的退出 return 只有在main函式中執行才能將程序退出。exit 程序退出函式,會自動重新整理快取區。exit 強制退出程序,不會重新整理快取區。2 特殊程序 2.1 孤兒程序 父程序退出,而子程序單獨存在。子程序變成孤兒程序。2.2 殭屍程序 父程序存在,子程序退出。父程序沒...
高階程序管理之程序優先順序
linux不會隨意對程序進行排程。事實上,應用程式會被指派優先順序,優先順序會對程序何時執行以及執行多久造成影響。以往,unix將優先順序成為友善值 nice value 因為友善值背後的概念是通過調低乙個程序的優先順序來 善待 系統上的其他程序,這讓其他程序可以使用較多的處理器空間。友善值可控制乙...
Linux核心之程序位址空間
程序使用的是虛擬記憶體中的位址,也叫線性位址,由作業系統協助相關硬體 如mmu 對映到實體地址。線性位址是通過頁表 page table 對映到物理記憶體,頁表由作業系統維護並被處理器引用。核心空間在頁表中擁有較高特權級,因此使用者態程式試圖訪問這些頁時會導致乙個頁錯誤。在linux中,核心空間是持...