內存四區模型
圖1、內存四區模型
流程說明
1、操作系統把物理硬盤代碼load到內存
2、操作系統把c代碼分成四個區
3、操作系統找到main函數入口執行
1、內存四區:
一個由c/C++編譯的程序佔用的內存分爲以下幾個部分
1、棧區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方
式類似於數據結構中的棧。
2、堆區(heap: 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回 收 。
注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表。
3、數據區:主要包括靜態全局區和常量區,如果要站在彙編角度細分的話還可以分爲很多小的區。
全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變
量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。
程序結束後有系統釋放
常量區 :常量字符串就是放在這裏的。 程序結束後由系統釋放
4、代碼區:存放函數體的二進制代碼。
2、堆棧的生長方向:
1、堆棧的生長方向和存放數據增長方向不一樣
圖2、堆棧的生長方向