一、堆
大塊內存:堆內存的總容量很大,各個進程按需申請,使用完成後手動釋放;
手動申請、釋放:malloc申請、free釋放;
髒內存:堆內存是反覆使用,且不會清零;
臨時性:只能在malloc和free之間訪問;
使用方式:先申請綁定(使用malloc),然後校驗是否申請成功(即校驗返回值釋放爲NULL,爲NULL則申請失敗),使用完成後釋放;
可能造成的問題:碎片問題、內存泄露;
二、棧
由編譯器自動分配管理:自動管理,不需要手動干預;
反覆使用:棧內存就是一塊空間,程序反覆使用;
棧的管理形式:先進先出;
髒內存:棧內存由於是反覆使用的,每次使用後程序都不會去清理,因此保留原來的值;
三、段
分爲:代碼段、數據段、bss段;
代碼段:程序中可執行的部分;
數據段:程序中的數據,C語言中的全局變量(局部變量只能算函數的數據);
bss段:被初始化爲0 本質上也是屬於數據段 是初始化爲0的數據段;
有些數據會被放在代碼段:
如:C語言中使用char* p=“linux”,實際上被分配在代碼段,也就是“linux” 實際上是一個字符常量,相當於const char* p=“linux”;
const型常量:const定義常量 實現方式有兩種:
1.使用const修飾的變量放入代碼段實現不能修改;
2.由編譯器檢查確保const不會被修改,實際上還是放在數據段;