C程式存儲空間布局一般由以下幾部分組成:
正文段:有CPU執行的機器指令構成。通常,正文段是共享的,是以同時啟動一個程式的多個程序,在記憶體中隻有一個正文段的副本。正文段是隻讀的防止程式意外修改。
初始化資料段:常稱為資料段,有程式裡初始化過的靜态變量構成,如:
該變量初始化賦初值為123存放在初始化資料段。
非初始化資料段: BSS段,存儲未初始化全局變量,靜态變量的一塊記憶體。例如聲明全局數組 int a[100], 不會将100個0記錄在可執行檔案鏡像中,而隻是記錄了辨別符a和其所占用的記憶體大小
棧:自動變量,函數調用都在棧上。函數裡儲存的資訊(形參,變量,傳回位址)都在此段上,會自動開辟空間,并且函數執行完畢後自動釋放。
執行流執行到函數調用時配置設定記憶體, 高位址是棧底, 向低位址方向增長
堆:通常在堆上動态存儲配置設定,由人為開辟空間,人為釋放空間。