国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

內存管理的理解

2019-11-06 06:11:06
字體:
來源:轉載
供稿:網友
內存管理未初始化的全局變量(.bss段)bss 段:沒有被初始化和初始化為0 的全局變量bss類型的全局變量只占運行時的內存空間,而不占用文件空間作為全局變量,在整個程序運行周期內,bss數據是一直存在的初始化過的全局變量(.data段)data 段用來存放那些初始化為非0 的全局變量data類型的全局變量既占文件空間,也占運行時的內存空間作為全局變量,在整個程序運行周期內,data數據是一直存在的常量數據(rodata段)rodata用來存放常量數據的注:常量不一定在rodata中,有的存放在代碼段(.text)中對于字符串常量,編譯器會自動去掉重復的,保證一個字符串在一個可執行文件中只存在一份復制rodata是多個進程間可以共享的,提高運行空間的利用率在有的嵌入式系統中,rodata放在ROM中,運行時直接讀取,無需加載到RAM常量是不能修改的,修改常量在linux中會出現段錯誤總結:在運行過程中 ,把不會改變的數據設為rodata類型,在多個進程間共享,大大提高空間的利用率,甚至不占用RAM空間,同時由于rodata在只讀的內存頁面是受保護的,這可以提高的程序的穩定性,字符串會被放在rodata中,其他數據加上const關鍵字修飾也能放在rodata中代碼(.text)段text段存放代碼和部分整數常量,這個段是可執行的,這點不同于rodata,其他類似棧(stack)存放臨時變量和函數參數棧向下(低地址)增長,每向棧中PUSH一個元素,棧頂就向低地址擴展,每從棧中POP一個元素,棧頂就向高地址回退注:存放在棧中的數據只在當前函數及下一層函數中有效,一旦函數被返回了,這些函數也就自動釋放了,繼續訪問這些變量會造成意想不到的錯誤堆(heap)malloc:用來分配一塊指定大小的內存realloc:用來調整/重分配一塊存在的內存free:用來釋放不再使用的內存malloc 和 free要配對使用,內存分配了不釋放稱為內存泄漏,內存分多少用多少,讀多了會讀到隨機數據,寫多了會造成隨機破壞,這種情況我們稱為緩沖區溢出屬性為r-p表示存放的是rodata屬性為rw-p表示存放的是bss和data屬性為r-xp表示存放的是text數據內存分配方式有三種從靜態存儲區域分配,內存在編譯時就分配好,整個程序執行期間都存在,如:全局變量,static變量在棧上創建,函數內的局部變量,分配運算使用內置于處理器的指令集在堆上分配,亦稱為動態分配,如:malloc new申請,free和delete釋放,生存期由程序員決定總結:全局變量和static變量是整個程序需要用到的,單獨分出一塊存儲區保存,在程序的整個運行期間該存儲區儲存的數據不清空;局部變量是在函數退出時自動清空,放在棧(stack)里進行臨時存儲,用指令new和malloc分配的內存需要自己在堆(heap)中手動申請并使用free和delete指令手動釋放。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吕梁市| 云龙县| 天全县| 昔阳县| 连平县| 喀什市| 棋牌| 天镇县| 邓州市| 长沙市| 崇明县| 榆树市| 双辽市| 淳化县| 香河县| 玛沁县| 高要市| 涡阳县| 玉龙| 北海市| 克东县| 新昌县| 宁都县| 新宁县| 东宁县| 萨嘎县| 始兴县| 翁牛特旗| 天柱县| 石城县| 独山县| 盱眙县| 桂平市| 德昌县| 容城县| 永年县| 武功县| 南阳市| 台南市| 大竹县| 厦门市|