進程的內存分布


引言

  記得,兩年前在北京找工作過程中,經常被面試官問進程在內存中是如何分布存放的,主要表現為幾個段,各個段的意思是什么?之后在工作當中,特別在嵌入式工作領域當中,時不時的提到這樣的問題。我想這個問題不僅僅我碰到,許多從事計算機行業工作的同行也遇到。今天趁有點時間,就來對進程內存分布進行一個簡單的講解,希望對讀者有幫助。

進程的內存分布

  進程的內存分布,大體分為:代碼段,數據段,堆段,棧段和其它段,具體如下圖所示:

圖:進程內存分布

  我們自底向上的方式進行講解:

  1. 代碼段:主要是程序的代碼以及編譯時靜態鏈接進來的庫。這段內存大小在程序運行之前就已經確定,而且是只讀,可能存在一些常量,比如字符串常量。

  2. 數據段:分為data和bss兩個段,表現為靜態內存段,data段存放已初始化的全局變量(靜態內存分配的變量和初始化全局變量)。bss段存放未初始化的全局變量,在內存中bss段被清零。

  3. 堆  段:用於程序動態內存分配和管理,如何分配和管理由程序的開發者決定,大小不固定(跟您的機器內存有關系),可以動態伸縮。

  4. 映射段:該內存區域存放鏈接其它動態程序庫的向量,共享內存映射向量等等。

  5. 棧  段:棧是一種先進后出的數據結構,該段內存區域由程序在運行中自行管理,如:局部變量保存和撤除、函數調用相關等。

  6. 輸入的環境變量和參數段:主要內存程序執行時的環境變量,輸入參數等等。

  7. 就是系統區域。

總結

  終上所述,我們根據圖中的7個部分自底向上的進行簡單的講解,各個段存放的數據和作用相信讀者也有了底,祝你生活愉快,妹子大大的有,妹子嘛勸你還是專一一個好男人吧,免得吃虧!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com