自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++內(nèi)存分配應用技巧分享

開發(fā) 后端
C++內(nèi)存分配的方式總共有兩種,其中包括:從靜態(tài)存儲區(qū)域分配;在棧上創(chuàng)建;從堆上分配,亦稱動態(tài)內(nèi)存分配等等。

C++編程語言中對于內(nèi)存的操作是一個比較重要的應用技巧。我們在這里分別向大家介紹了三種不同的分配方式,以便大家在實際應用中能夠選擇一種適合自己需求的方法,從而提高自己的程序開發(fā)效率。#t#

C++內(nèi)存分配方式總共有三種:

(1)從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量,static變量。

(2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。

(3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負責在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。

內(nèi)存使用錯誤

發(fā)生內(nèi)存錯誤是件非常麻煩的事情。編譯器不能自動發(fā)現(xiàn)這些錯誤,通常是在程序運行時才能捕捉到。而這些錯誤大多沒有明顯的癥狀,時隱時現(xiàn),增加了改錯的難度。有時用戶怒氣沖沖地把你找來,程序卻沒有發(fā)生任何問題,你一走,錯誤又發(fā)作了。 常見的內(nèi)存錯誤及其對策如下:

* C++內(nèi)存分配未成功,卻使用了它。

編程新手常犯這種錯誤,因為他們沒有意識到內(nèi)存分配會不成功。常用解決辦法是,在使用內(nèi)存之前檢查指針是否為NULL。如果是用malloc或new來申請內(nèi)存,應該用if(p==NULL) 或if(p!=NULL)進行防錯處理。

* 內(nèi)存分配雖然成功,但是尚未初始化就引用它。犯這種錯誤主要有兩個起因:一是沒有初始化的觀念;二是誤以為內(nèi)存的缺省初值全為零,導致引用初值錯誤(例如數(shù)組)。 內(nèi)存的缺省初值究竟是什么并沒有統(tǒng)一的標準,盡管有些時候為零值,我們寧可信其無不可信其有。所以無論用何種方式創(chuàng)建數(shù)組,都別忘了賦初值,即便是賦零值也不可省略,不要嫌麻煩。

* C++內(nèi)存分配成功并且已經(jīng)初始化,但操作越過了內(nèi)存的邊界。例如在使用數(shù)組時經(jīng)常發(fā)生下標“多1”或者“少1”的操作。特別是在for循環(huán)語句中,循環(huán)次數(shù)很容易搞錯,導致數(shù)組操作越界。

* 忘記了釋放內(nèi)存,造成內(nèi)存泄露。含有這種錯誤的函數(shù)每被調(diào)用一次就丟失一塊內(nèi)存。剛開始時系統(tǒng)的內(nèi)存充足,你看不到錯誤。終有一次程序突然死掉,系統(tǒng)出現(xiàn)提示:內(nèi)存耗盡。動態(tài)內(nèi)存的申請與釋放必須配對,程序中malloc與free的使用次數(shù)一定要相同,否則肯定有錯誤(new/delete同理)。

* 釋放了內(nèi)存卻繼續(xù)使用它。

有三種情況:

(1)程序中的對象調(diào)用關系過于復雜,實在難以搞清楚某個對象究竟是否已經(jīng)釋放了內(nèi)存,此時應該重新設計數(shù)據(jù)結(jié)構(gòu),從根本上解決對象管理的混亂局面。

(2)函數(shù)的return語句寫錯了,注意不要返回指向“棧內(nèi)存”的“指針”或者“引用”,因為該內(nèi)存在函數(shù)體結(jié)束時被自動銷毀。

(3)使用free或delete釋放了內(nèi)存后,沒有將指針設置為NULL。導致產(chǎn)生“野指針”。

【規(guī)則1】用malloc或new申請內(nèi)存之后,應該立即檢查指針值是否為NULL。防止使用指針值為NULL的內(nèi)存

【規(guī)則2】不要忘記為數(shù)組和動態(tài)內(nèi)存賦初值。防止將未被初始化的內(nèi)存作為右值使用。

【規(guī)則3】避免數(shù)組或指針的下標越界,特別要當心發(fā)生“多1”或者“少1”操作。

【規(guī)則4】動態(tài)內(nèi)存的申請與釋放必須配對,防止內(nèi)存泄漏。

【規(guī)則5】用free或delete釋放了內(nèi)存之后,立即將指針設置為NULL,防止產(chǎn)生“野指針”。

以上就是我們?yōu)榇蠹医榻B的C++內(nèi)存分配的方式的介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-01 11:13:00

C++ Traits

2010-02-06 13:47:08

C++標準擴展

2010-02-01 17:09:07

C++鏈表操作

2010-02-05 13:44:06

C++ eof()函數(shù)

2011-07-15 01:10:13

C++內(nèi)存分配

2010-02-06 16:16:01

C++冒泡排序

2010-02-05 18:04:21

C++剪切板

2011-07-13 16:36:11

C++

2010-02-03 15:35:00

C++輸入輸出漢字

2010-02-05 17:25:26

C++標識符命名規(guī)則

2011-07-01 10:16:08

C++內(nèi)存管理

2010-02-06 13:52:39

C++ profile

2010-02-06 10:24:48

C++二維數(shù)組初始化

2010-02-06 17:09:29

C++文件拷貝

2010-02-04 11:38:43

C++獲取當前路徑

2010-02-02 10:46:51

C++獲取文件大小

2010-02-04 15:19:38

C++獲取CPU信息

2010-02-06 17:21:20

C++ CreateT

2010-02-05 14:59:31

C++命令行模式編譯設

2009-12-15 10:23:23

Ruby應用技巧
點贊
收藏

51CTO技術棧公眾號