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
主站蜘蛛池模板: 四虎永久在线精品影院| 91精品国产一区自在线拍| 欧美在线一二区| 怡春院欧美一区二区三区免费| 九色综合伊人久久富二代| 国产精品嫩草影院av| 久久午夜影院| 午夜免费视频网站| 91在线播放免费不卡无毒| 波多野结衣一区二区三视频| 国产精品永久久久久| 婷婷激情亚洲| 亚洲欧洲日产无码AV| 国产精品无码久久久久久| 久久男人资源站| 激情综合五月网| 免费福利视频网站| 久久精品人人做人人综合试看| 国产在线第二页| 在线欧美一区| 久久国产精品夜色| 午夜精品一区二区蜜桃| 看你懂的巨臀中文字幕一区二区| 国产高清在线精品一区二区三区| 无码国内精品人妻少妇蜜桃视频| 日韩不卡免费视频| a级毛片视频免费观看| 婷婷五月在线视频| 免费视频在线2021入口| 国产丝袜啪啪| 中文字幕亚洲综久久2021| 成人午夜久久| 久久精品无码一区二区日韩免费| 女人18一级毛片免费观看| 国产玖玖视频| 日韩欧美综合在线制服| 国产一级一级毛片永久| 99国产在线视频| 亚洲第一网站男人都懂| 日韩第九页| 狠狠v日韩v欧美v| 国产69囗曝护士吞精在线视频| 最新国产麻豆aⅴ精品无| 美女一级毛片无遮挡内谢| 久久国产拍爱| 91免费观看视频| 国产嫖妓91东北老熟女久久一| 特级精品毛片免费观看| 久久黄色影院| 国产精彩视频在线观看| 久视频免费精品6| 国产成人调教在线视频| 亚洲乱伦视频| 久久网欧美| 亚洲AV永久无码精品古装片| 亚洲综合精品第一页| 精品欧美视频| 日韩国产 在线| 亚洲Av综合日韩精品久久久| 999福利激情视频| 亚洲一区二区无码视频| 中文国产成人精品久久| 亚洲精品国产乱码不卡| 三级毛片在线播放| 亚洲高清无码久久久| 69综合网| 91偷拍一区| 国产黄色片在线看| 黄色成年视频| 一本二本三本不卡无码| 国产美女免费| 午夜激情福利视频| 亚洲天堂视频网站| 伊人久久久久久久| 亚洲熟妇AV日韩熟妇在线| 夜夜高潮夜夜爽国产伦精品| 亚洲成肉网| 成人国产免费| 91在线播放国产| 国产美女91视频| 亚洲精品国产成人7777| 日韩精品中文字幕一区三区|