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

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

C語言--內存管理

2019-11-06 06:16:11
字體:
來源:轉載
供稿:網友

對于任何的操作系統來說,內存都是很寶貴的一個地方。所以,對于編程語言來說,內存管理就顯得尤為重要。

C語言代碼在內存中運行的時候,我們大致將占用的內存分為4塊區域:代碼區、靜態區、棧區、堆區。這4各區域,有著各自的特點,他們也存儲著我們的程序在運行中的不同類型的數據。弄明白了這4個區域的數據存儲特點,也就對于內存管理有了差不多的認識了。

代碼區:存放程序運行時的函數體的二進制代碼,由操作系統進行管理。

靜態區:全局變量和靜態變量(static修飾的變量)存儲的區域,當程序運行結束后由操作系統釋放。

棧區:存放函數參數,局部變量,由編譯器自動分配釋放。

堆區:存儲程序員用malloc和new申請的變量,這種是動態申請內存,在變量不再被使用時有程序員自行free和delete,若不處理,在程序執行完成后由操作系統回收。但是這樣在程序結束之前,內存會一直被占用,浪費內存空間

從上面的總結來看,我們在使用內存的時候要注意幾點:

1、動態分配內存時,要注意及時釋放。

2、盡可能的不使用全局變量或靜態變量。

3、代碼簡潔。

在實際開發中,出現內存問題是很麻煩的一件事情,編譯器是不能自動發現這些錯誤的,在程序運行的時候才會被捕捉到。而且這類錯誤也是時隱時現的,很難修改。這樣就要求我們在代碼的編寫過程中就要注意內存管理的問題。下面來說幾個容易出錯的情況:

1、使用了分配未成功的內存。

在我們申請內存的時候,會出現一種情況,那就是內存分配不成功。對于這種可能出現的問題,就要求我們在使用之前先去檢查指針是否為空。如果是動態分配的內存,那么在使用之前先用if(p == NULL )判斷。如果是作為函數的參數,使用assert(p != NULL)檢查。

2、未對已經分配成功的內存初始化。

對于一個變量來說,如果沒有初始化,那么內存的缺省初始值究竟是什么,這個沒有標準的規定,有的時候為零,但也有的時候不為零,這樣就會出現因為變量初始值而引發一些問題,這種問題只會體現在數據上,也是很難排查的。所以,給申請的變量賦初值是很有必要的。

3、內存越界。

這個問題最好也最多的體現是數組越界問題。這個就需要程序員自己去注意自己申請的空間了。

4、沒有及時釋放,導致內存泄漏。

需要程序員自己去釋放的內存只有動態分配的堆區的內存,要管理好著一塊的內存,使其不出問題,那么,內存申請和釋放必須配對。只申請,不釋放,內存一直被占用,這樣總會有內存不夠的時候。

5、內存已經被釋放,還繼續使用。

這個問題體現在,動態申請的內存被釋放后,還繼續使用的。函數返回指向棧區的指針。程序設計復雜,不知何時將內存釋放了。第一種情況的解決還是在程序員本身,注意內存應在不再使用的時候釋放。第二種情況,是因為棧區的只是一個暫存區,在函數結束的時候,內存就被回收了。第三種情況就需要重新設計數據類型了。

以上的5點,基本上已經體現了內存可能出現的問題,開發的時候一定要謹記。內存是很寶貴的資源,使用的時候一定要小心!小心!!再小心!!!

關于各種變量在內存中的表現的代碼部分,這里給一個地址:http://blog.csdn.net/ic_tv/article/details/46718907。這里的代碼寫的很詳細。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建始县| 筠连县| 五峰| 吉林省| 涞源县| 霍林郭勒市| 商南县| 谢通门县| 黔西县| 吉首市| 双柏县| 四平市| 旅游| 延寿县| 仙游县| 芜湖市| 朔州市| 牙克石市| 清远市| 腾冲县| 桂阳县| 金坛市| 汨罗市| 香港| 湘潭市| 屏东县| 宁津县| 班玛县| 肥乡县| 汕尾市| 普洱| 隆林| 张家川| 关岭| 铁力市| 红河县| 清水河县| 克什克腾旗| 内丘县| 黑河市| 甘洛县|