999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺議C++中的內存管理

2014-04-29 00:44:03關青苗蔣爭明
中國電子商情 2014年12期
關鍵詞:分配定義程序

關青苗 蔣爭明

Abstract: Memory management in C++ is a big issue for the users who rely on those languages in their project. And memory management two aspects in its domain, first, make it work right; second, make it fast. Every programmer knows it must be listed like this, because code run dizzily fast, but dont work under control, is no use at all. If memory allocated but not released correctly, then memory leak generate. So the defensive programming is a effective method to avoid the error.

Key word:Memory manage, memory leak, defensive programming

一、引言

內存管理的主要內容有兩點:1,將內存正確的分配和釋放; 2,讓計算機能快速的執行內存的分配和釋放。我們都知道這個順序不能顛倒,因為即使程序運行的很快,但是沒有正確的分配和釋放內存,這個程序對我們也沒有多少用處。

二、內存的分配

C++分配內存按分配類型分為三種。

1、全局靜態量,在文件的全局變量區定義一整型變量,諸如static int num = 0定義的變量,這種變量在程序的開始運行到結束運行的全部生命周期都存在,而且此變量名在后面程序內不可以重復定義,如果重復定義,編譯器會提示錯誤,將無法通過編譯而生成可運行文件。此種分配類型分配給變量的內存位置是全局區。程序的開始運行時,由編譯器分配到內存的全局變量區,直到程序結束,變量所使用的內存被編譯器釋放。

2、局部變量,典型的是在函數或者語句內部定義的變量,比如for(int i=0; i

3、使用運算符new分配的變量,比如:new int[10], 或者malloc (10*sizeof(int)),此種方式分配的內存位置存在一個稱為堆區的內存上,注意它和數據結構的堆是不同的,實現方式類似于鏈表。一般來說,此種分配方式是在要分配的內存無法預知的情況下,它由程序員手動分配,手動釋放。如果程序員在使用此類型變量不正確,將導致各種問題的產生。

三、常見錯誤及對策

1、對上面提到的全局靜態變量num,在程序的使用過程中,就是要注意你的每次改變,都是全局性的,所以盡量不要輕易改變它除非你想這么做。如果為了防止程序的其他用戶改變你不希望改變的全局變量,你可以在它前面加上const來限定。比如:const int num = 0;這樣別的用戶在試圖改變之,編譯器就會給出警告。

2、而使用局部變量的時候,容易出現的錯誤就是對變量的生存周期不了解產生的錯誤,在變量的生存期內重復定義了變量。我們可以使用長命名法來命名變量,這樣變量重復定義的機會就大大降低,而且變量名在使用過程中,其意義也更加明顯。

3、而使用new分配的變量內存,最容易出現的錯誤是,沒有正確的釋放。常見的錯誤比如,使用int *p = new int來分配一組整形的數組;或者使用delete p來釋放int *p = new int[10]分配的數組;或者使用delete運算符再次釋放已經釋放過的內存塊,這樣會產生無法預料的后果。這樣產生的錯誤,編譯器無法幫組我們識別,所以這種錯誤更加隱蔽,而且在調試的時候更難發現。我們的對策就是可以使用一個對象的計數器,來監視對象的創建和釋放,采取一些斷言,比如assert函數,來以防止我們錯誤的調用delete運算符。

四、應用實例

下面我們使用一段代碼來說明我們的3.3中的方法,采用的IDE是vs2010,平臺是win7 64位Intel機器。

#include "stdio.h"

static int counter_for_object = 0;

#define NULL 0

class monster

{

private:

int hp;

int mp;

public:

monster():hp(0),mp(0){ counter_for_object ++;}

~monster(){counter_for_object--; }

};

int _tmain(int argc, _TCHAR* argv[])

{

monster *groupOfMonsters = new monster[10];

delete [] groupOfMonsters;

groupOfMonsters = NULL;

printf("end of code\n");

return 0;

}

如果在打印界面的end of code之前出現的counter_for_object最后不為0,則可判定出內存泄露.

五、結束語

合理的分配內存和釋放內存,是程序員的在編寫合理的代碼時最重要的任務,而采用合理的策略和良好的代碼習慣,是我們能保證代碼質量的工具。

參考文獻

[1] Scott Meyers, Effective C++[M], Addison-Wesley, 1992.

[2] 沈被娜,劉祖照. 計算機軟件基礎(第三版)[M]. 清華大學出版社.2000.

(作者單位:廣東科技學院)

猜你喜歡
分配定義程序
應答器THR和TFFR分配及SIL等級探討
遺產的分配
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
一種分配十分不均的財富
績效考核分配的實踐與思考
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国内精品久久久久鸭| 国产午夜精品一区二区三区软件| 国产区网址| 青青草一区二区免费精品| 精品视频福利| 亚洲国产第一区二区香蕉| 国产精品无码作爱| 精品无码专区亚洲| 国产日产欧美精品| 免费a级毛片视频| 四虎国产精品永久一区| 97无码免费人妻超级碰碰碰| 538国产视频| 久久99国产乱子伦精品免| 色偷偷一区二区三区| 色亚洲成人| 另类欧美日韩| 中文无码日韩精品| 国产精品伦视频观看免费| 成人免费视频一区| 一级全黄毛片| 无码中字出轨中文人妻中文中| 国产亚洲精品在天天在线麻豆| 国产玖玖视频| 国产xx在线观看| 色综合成人| 动漫精品啪啪一区二区三区| 永久毛片在线播| 国产一区二区三区精品久久呦| 香蕉综合在线视频91| 又黄又湿又爽的视频| 国产丝袜一区二区三区视频免下载| 亚洲国产成熟视频在线多多| 综合亚洲色图| 日韩毛片免费| 国产又粗又猛又爽| 伊人久久久大香线蕉综合直播| 在线精品视频成人网| 国产一区成人| 国产剧情国内精品原创| 99久久婷婷国产综合精| 97久久精品人人做人人爽| 国产成人精品午夜视频'| 欧美色综合久久| 国产91丝袜| 欧美亚洲欧美| 欧美天堂在线| 国产在线欧美| 精品国产成人a在线观看| 国产欧美一区二区三区视频在线观看| 国产成人永久免费视频| 日韩黄色在线| 欧美综合区自拍亚洲综合绿色| 国产成人亚洲精品蜜芽影院| 97国产成人无码精品久久久| 综合色在线| 精品欧美一区二区三区在线| 丝袜亚洲综合| 国产玖玖玖精品视频| 伊人激情综合网| 成人国产精品网站在线看 | 成人无码区免费视频网站蜜臀| 手机在线国产精品| 凹凸国产熟女精品视频| 红杏AV在线无码| 国产在线观看一区二区三区| 免费a在线观看播放| 日韩毛片在线视频| 天堂av综合网| 99视频全部免费| 乱人伦视频中文字幕在线| 中国成人在线视频| 亚洲欧美人成人让影院| 色老二精品视频在线观看| 亚洲看片网| 刘亦菲一区二区在线观看| 国产精品微拍| 一级一毛片a级毛片| 中文字幕丝袜一区二区| 99资源在线| 欧美日韩一区二区三| 国产在线第二页|