


全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
控制C+的內(nèi)存分配2004-01-25 09:00 作者: 出處: 論壇 責(zé)任編輯:方舟 在嵌入式系統(tǒng)中使用C+的一個常見問題是內(nèi)存分配,即對new 和 delete 操作符的失控。 具有諷刺意味的是,問題的根源卻是C+對內(nèi)存的管理非常的容易而且安全。具體地說,當(dāng)一個對象被消除時,它的析構(gòu)函數(shù)能夠安全的釋放所分配的內(nèi)存。 這當(dāng)然是個好事情,但是這種使用的簡單性使得程序員們過度使用new 和 delete,而不注意在嵌入式C+環(huán)境中的因果關(guān)系。并且,在嵌入式系統(tǒng)中,由于內(nèi)存的限制,頻繁的動態(tài)分配不定大小的內(nèi)存會引起很大的問題以及堆破碎的風(fēng)險。作為忠告,保守的使用內(nèi)存分配是嵌入式環(huán)境中的第一原則。但當(dāng)你必須要使用new 和delete時,你不得不控制C+中的內(nèi)存分配。你需要用一個全局的new 和delete來代替系統(tǒng)的內(nèi)存分配符,并且一個類一個類的重載new 和delete。一個防止堆破碎的通用方法是從不同固定大小的內(nèi)存持中分配不同類型的對象。對每個類重載new 和delete就提供了這樣的控制。重載全局的new 和delete 操作符可以很容易地重載new 和 delete 操作符,如下所示:void * operator new(size_t size)void *p = malloc(size);return (p);void operator delete(void *p);free(p); 這段代碼可以代替默認(rèn)的操作符來滿足內(nèi)存分配的請求。出于解釋C+的目的,我們也可以直接調(diào)用malloc() 和free()。也可以對單個類的new 和 delete 操作符重載。這是你能靈活的控制對象的內(nèi)存分配。class TestClass public:void * operator new(size_t size);void operator delete(void *p);/ . other members here .;void *TestClass:operator new(size_t size)void *p = malloc(size); / Replace this with alternative allocatorreturn (p);void TestClass:operator delete(void *p)free(p); / Replace this with alternative de-allocator 所有TestClass 對象的內(nèi)存分配都采用這段代碼。更進(jìn)一步,任何從TestClass 繼承的類也都采用這一方式,除非它自己也重載了new 和 delete 操作符。通過重載new 和 delete 操作符的方法,你可以自由地采用不同的分配策略,從不同的內(nèi)存池中分配不同的類對象。為單個的類重載 new 和 delete 必須小心對象數(shù)組的分配。你可能希望調(diào)用到被你重載過的new 和 delete 操作符,但并不如此。內(nèi)存的請求被定向到全局的new 和delete 操作符,而這些內(nèi)存來自于系統(tǒng)堆。C+將對象數(shù)組的內(nèi)存分配作為一個單獨(dú)的操作,而不同于單個對象的內(nèi)存分配。為了改變這種方式,你同樣需要重載new 和 delete 操作符。class TestClass public:void * operator new (size_t size);void operator delete (void *p);/ . other members here .;void *TestClass:operator new (size_t size)void *p = malloc(size);return (p);void TestClass:operator delete (void *p)free(p);int main(void)TestClass *p = new TestClass10;/ . etc .delete p; 但是注意:對于多數(shù)C+的實(shí)現(xiàn),new操作符中的個數(shù)參數(shù)是數(shù)組的大小加上額外的存儲對象數(shù)目的一些字節(jié)。在你的內(nèi)存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)士晉級考試題及答案
- 山西中考數(shù)學(xué)試題及答案
- 養(yǎng)老護(hù)理員試題及答案
- 團(tuán)拜活動春節(jié)活動方案
- 海淀高考試題及答案
- 啤酒相親活動方案
- 喜氣洋洋迎新年活動方案
- 商場福利活動方案
- 國慶文藝演出活動方案
- 周年慶活動超市活動方案
- 中國紅色文化精神學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 平方差公式公開課一等獎?wù)n件市公開課一等獎?wù)n件省賽課獲獎?wù)n件
- 2023年公司商業(yè)機(jī)密保密管理
- 《古生物學(xué)》講義
- 山東農(nóng)業(yè)大學(xué)工程造價與招投標(biāo)(專升本)期末考試復(fù)習(xí)題
- 2023山西焦煤集團(tuán)有限責(zé)任公司井下操作工招聘2000人筆試模擬試題及答案解析
- 中國西部國際汽車城可行性研究報告(上)
- 通信工程施工組織方案
- 火災(zāi)報警系統(tǒng)操作及維護(hù)保養(yǎng)規(guī)程(保得威爾)
- 靜脈輸液工具合理選擇
- GB/T 9634.2-2002鐵氧體磁心表面缺陷極限導(dǎo)則第2部分:RM磁心
評論
0/150
提交評論