堆、棧、段

一、堆

大塊內存:堆內存的總容量很大,各個進程按需申請,使用完成後手動釋放;

手動申請、釋放: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不會被修改,實際上還是放在數據段;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章