


必看!詳解Linux進程與堆?臻g
添加時間:2010-12-1
添加:
admin
一)概述
.堆棧是一個用戶空間的內存區域,進程使用堆棧作為臨時存儲.
.堆棧中存放的是函數中的局部變量,在函數的生命周期中可以將變量壓入堆棧,編譯器需要確保堆棧指針在函數退出前恢復到初始位置,也就是說,內存是自動分配和釋放的.
.C/C++把存儲在堆棧中的局部變量當作automatic存儲,并使用auto關鍵字,這是局部變量的默認存儲方式,所以現在沒有人用auto關鍵詞.
.與動態存儲相對映的靜態存儲,也就是用static定義的局部變量,它不用堆棧來存儲,而是使用數據段來存儲.
.堆棧的基地址位于用戶空間的最高虛擬地址附近,并從那里向下延伸.
.一個進程開始時,堆棧的最大值就不能改變,如果占用的空間超過了堆棧大小,那么就會導致堆棧溢出.
二)進程的內存組織形式
進程被分為三個區域:文本,數據和堆棧.
1)文本區域:
文本區域也叫做代碼段,是由程序確定的,它包括代碼(指令)和只讀數據,該區域通常被標記為只讀,任何對其寫入的操作會導致段錯誤.
2)數據區域:
數據區域也叫做數據段,它包括已初始化和未初始化的數據,靜態變量存儲在這個區域中,它的大小可以用系統調用brk(2)來改變.
3)堆棧區域:
堆棧區域也叫堆棧段,它用于給局部變量動態分配空間,同樣函數傳遞參數和函數返回值也要用到堆棧.
堆棧也可向下增長(向內存低地址)也可以向上增長,這依賴于具體的實現,通常都是向下增長的,而SP(堆棧指針)也是指向堆棧的最后地址.
4)內存的分配區域:
根據前面所述,堆棧是位于最高虛擬地址附近,而數據段則位于堆棧段之后,最后是代碼段.
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解