全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
控制C+的內(nèi)存分配2004-01-25 09:00 作者: 出處: 論壇 責(zé)任編輯:方舟 在嵌入式系統(tǒng)中使用C+的一個常見問題是內(nèi)存分配,即對new 和 delete 操作符的失控。 具有諷刺意味的是,問題的根源卻是C+對內(nèi)存的管理非常的容易而且安全。具體地說,當一個對象被消除時,它的析構(gòu)函數(shù)能夠安全的釋放所分配的內(nèi)存。 這當然是個好事情,但是這種使用的簡單性使得程序員們過度使用new 和 delete,而不注意在嵌入式C+環(huán)境中的因果關(guān)系。并且,在嵌入式系統(tǒng)中,由于內(nèi)存的限制,頻繁的動態(tài)分配不定大小的內(nèi)存會引起很大的問題以及堆破碎的風(fēng)險。作為忠告,保守的使用內(nèi)存分配是嵌入式環(huán)境中的第一原則。但當你必須要使用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); 這段代碼可以代替默認的操作符來滿足內(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)存分配都采用這段代碼。更進一步,任何從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)存分配作為一個單獨的操作,而不同于單個對象的內(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+的實現(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版固定資產(chǎn)互借互貸協(xié)議樣式版B版
- 2022端午節(jié)活動策劃方案三篇范文
- 2025年COD自動在線監(jiān)測儀項目規(guī)劃申請報告范文
- 2024-2025學(xué)年謝家集區(qū)數(shù)學(xué)三年級第一學(xué)期期末監(jiān)測試題含解析
- 2025年低壓接觸器項目提案報告
- 員工工作計劃(15篇)
- 九年級中秋節(jié)滿分作文5篇
- 中專自我鑒定范文集合五篇
- 教學(xué)改革學(xué)期工作總結(jié)簡短范文5篇模板
- 常用的員工個人工作總結(jié)12篇
- 禁止隨地亂扔垃圾
- 醫(yī)學(xué)英語閱讀二分冊翻譯及答案-參考
- 2025年高考政治時政熱點 延遲退休政策(知識銜接+練習(xí)+解析)
- 2.1 網(wǎng)絡(luò)改變世界 (教案) -2024-2025學(xué)年道德與法治八年級上冊 統(tǒng)編版
- 常見病的健康管理學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 認識西紅柿課件圖片
- 國家開放大學(xué)《經(jīng)濟學(xué)(本)》形考任務(wù)1-6參考答案
- 汽車保險與理賠課件 7.2新能源汽車 查勘
- 裝飾裝修設(shè)備表
- 非遺漆扇扇子科普宣傳
- 2024秋期國家開放大學(xué)??啤侗O(jiān)督學(xué)》一平臺在線形考(形成性考核一至四)試題及答案
評論
0/150
提交評論