


全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
控制C+的內(nèi)存分配2004-01-25 09:00 作者: 出處: 論壇 責(zé)任編輯:方舟 在嵌入式系統(tǒng)中使用C+的一個(gè)常見(jiàn)問(wèn)題是內(nèi)存分配,即對(duì)new 和 delete 操作符的失控。 具有諷刺意味的是,問(wèn)題的根源卻是C+對(duì)內(nèi)存的管理非常的容易而且安全。具體地說(shuō),當(dāng)一個(gè)對(duì)象被消除時(shí),它的析構(gòu)函數(shù)能夠安全的釋放所分配的內(nèi)存。 這當(dāng)然是個(gè)好事情,但是這種使用的簡(jiǎn)單性使得程序員們過(guò)度使用new 和 delete,而不注意在嵌入式C+環(huán)境中的因果關(guān)系。并且,在嵌入式系統(tǒng)中,由于內(nèi)存的限制,頻繁的動(dòng)態(tài)分配不定大小的內(nèi)存會(huì)引起很大的問(wèn)題以及堆破碎的風(fēng)險(xiǎn)。作為忠告,保守的使用內(nèi)存分配是嵌入式環(huán)境中的第一原則。但當(dāng)你必須要使用new 和delete時(shí),你不得不控制C+中的內(nèi)存分配。你需要用一個(gè)全局的new 和delete來(lái)代替系統(tǒng)的內(nèi)存分配符,并且一個(gè)類一個(gè)類的重載new 和delete。一個(gè)防止堆破碎的通用方法是從不同固定大小的內(nèi)存持中分配不同類型的對(duì)象。對(duì)每個(gè)類重載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)的操作符來(lái)滿足內(nèi)存分配的請(qǐng)求。出于解釋C+的目的,我們也可以直接調(diào)用malloc() 和free()。也可以對(duì)單個(gè)類的new 和 delete 操作符重載。這是你能靈活的控制對(duì)象的內(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 對(duì)象的內(nèi)存分配都采用這段代碼。更進(jìn)一步,任何從TestClass 繼承的類也都采用這一方式,除非它自己也重載了new 和 delete 操作符。通過(guò)重載new 和 delete 操作符的方法,你可以自由地采用不同的分配策略,從不同的內(nèi)存池中分配不同的類對(duì)象。為單個(gè)的類重載 new 和 delete 必須小心對(duì)象數(shù)組的分配。你可能希望調(diào)用到被你重載過(guò)的new 和 delete 操作符,但并不如此。內(nèi)存的請(qǐng)求被定向到全局的new 和delete 操作符,而這些內(nèi)存來(lái)自于系統(tǒng)堆。C+將對(duì)象數(shù)組的內(nèi)存分配作為一個(gè)單獨(dú)的操作,而不同于單個(gè)對(duì)象的內(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; 但是注意:對(duì)于多數(shù)C+的實(shí)現(xiàn),new操作符中的個(gè)數(shù)參數(shù)是數(shù)組的大小加上額外的存儲(chǔ)對(duì)象數(shù)目的一些字節(jié)。在你的內(nèi)存
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公設(shè)備維護(hù)與維修電子教案 模塊一 家庭辦公 項(xiàng)目二 日常業(yè)務(wù)處理
- 2025年全球與中國(guó)跨境支付行業(yè)概述及機(jī)遇調(diào)研報(bào)告
- 2025標(biāo)準(zhǔn)辦公室租賃合同概述
- 湖南省長(zhǎng)沙市雅禮教育集團(tuán)2024-2025學(xué)年高一下學(xué)期期中考試英語(yǔ)試題(有答案)
- 2-2 細(xì)胞呼吸的原理和應(yīng)用(導(dǎo)學(xué)案)-2025年高考生物大一輪復(fù)習(xí)掃易錯(cuò)攻疑難學(xué)案
- 2025租房合同房東突然要求終止合同處理
- 2025年執(zhí)業(yè)藥師之中藥學(xué)綜合知識(shí)與技能綜合檢測(cè)試卷A卷含答案
- 2025年中級(jí)銀行從業(yè)資格之中級(jí)公司信貸過(guò)關(guān)檢測(cè)試卷B卷附答案
- 邵東鎮(zhèn)三中考試試卷及答案
- 山西高一統(tǒng)考試卷及答案
- 美國(guó)加征關(guān)稅從多個(gè)角度全方位解讀關(guān)稅課件
- “皖南八?!?024-2025學(xué)年高一第二學(xué)期期中考試-英語(yǔ)(譯林版)及答案
- 一例脂肪液化切口的護(hù)理
- 2025屆嘉興市高三語(yǔ)文二模作文解析:智慧不會(huì)感到孤獨(dú)
- GB 15269-2025雪茄煙
- 規(guī)模養(yǎng)殖場(chǎng)十項(xiàng)管理制度
- 2025航天知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 路基路面壓實(shí)度評(píng)定自動(dòng)計(jì)算表-標(biāo)準(zhǔn)-
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 【MOOC】機(jī)械原理-西北工業(yè)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論