C程序的內存分區(節選自黑馬訓練營day1)

通常來講,每一個C語言編寫的程序都須要通過保存,預處理,編譯,彙編,連接,最後生成二進制可執行文件,而後才能運行。這個可執行文件在運行以前,存放在電腦硬盤;執行的時候,被調入內存。程序員

同時,咱們要了解:組成C語言程序的不一樣的元素(如變量、常量、指令等)要放在內存中不一樣的地方,咱們看下圖:函數

這個就是內存的分區表格,C編譯器將內存劃分紅幾個分區,將C語言程序的不一樣元素放入不一樣的分區。不一樣分區不單單存放的程序元素不一樣,並且生命週期不一樣。管理內存加載和釋放的管理者也不一樣。代碼區和程序數據區(或者叫靜態區、全局區)是編譯器(也許是操做系統)管理,堆區是程序員管理(有的編譯器也幫助管理,做爲防火牆性質地存在,防止程序員忘記釋放內存),棧區則是實時加載和釋放,函數的參數值、返回值、局部變量等隨着函數運行結束,自動加載,自動釋放(這個應該是編譯器管理)。操作系統

其實,按照C語言程序的生命週期,整個內存分區能夠分爲三個部分:blog

第一部分:代碼區和程序數據區,存放指令和全局變量、靜態變量、常量,生命週期是整個程序運行過程。生命週期

第二部分:堆區,存放內容及生命週期由程序員指定。內存

第三部分:棧區,存放函數的參數值、返回值、局部變量,相關內存的內容隨着函數結束運行而釋放。編譯器

相關文章
相關標籤/搜索