


全文預覽已結束
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
控制C+的內存分配2004-01-25 09:00 作者: 出處: 論壇 責任編輯:方舟 在嵌入式系統中使用C+的一個常見問題是內存分配,即對new 和 delete 操作符的失控。 具有諷刺意味的是,問題的根源卻是C+對內存的管理非常的容易而且安全。具體地說,當一個對象被消除時,它的析構函數能夠安全的釋放所分配的內存。 這當然是個好事情,但是這種使用的簡單性使得程序員們過度使用new 和 delete,而不注意在嵌入式C+環境中的因果關系。并且,在嵌入式系統中,由于內存的限制,頻繁的動態分配不定大小的內存會引起很大的問題以及堆破碎的風險。作為忠告,保守的使用內存分配是嵌入式環境中的第一原則。但當你必須要使用new 和delete時,你不得不控制C+中的內存分配。你需要用一個全局的new 和delete來代替系統的內存分配符,并且一個類一個類的重載new 和delete。一個防止堆破碎的通用方法是從不同固定大小的內存持中分配不同類型的對象。對每個類重載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); 這段代碼可以代替默認的操作符來滿足內存分配的請求。出于解釋C+的目的,我們也可以直接調用malloc() 和free()。也可以對單個類的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); / Replace this with alternative allocatorreturn (p);void TestClass:operator delete(void *p)free(p); / Replace this with alternative de-allocator 所有TestClass 對象的內存分配都采用這段代碼。更進一步,任何從TestClass 繼承的類也都采用這一方式,除非它自己也重載了new 和 delete 操作符。通過重載new 和 delete 操作符的方法,你可以自由地采用不同的分配策略,從不同的內存池中分配不同的類對象。為單個的類重載 new 和 delete 必須小心對象數組的分配。你可能希望調用到被你重載過的new 和 delete 操作符,但并不如此。內存的請求被定向到全局的new 和delete 操作符,而這些內存來自于系統堆。C+將對象數組的內存分配作為一個單獨的操作,而不同于單個對象的內存分配。為了改變這種方式,你同樣需要重載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; 但是注意:對于多數C+的實現,new操作符中的個數參數是數組的大小加上額外的存儲對象數目的一些字節。在你的內存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省南京聯合體【棲霞、江寧、雨花】重點達標名校2025年初三中考一模試卷化學試題含解析
- 湖南省長沙市瀏陽市2025屆數學三下期末綜合測試模擬試題含解析
- 寧夏葡萄酒與防沙治沙職業技術學院《大學英語Ⅱ(聽力)》2023-2024學年第二學期期末試卷
- 武漢紡織大學外經貿學院《新藥研究與開發A》2023-2024學年第一學期期末試卷
- 遼寧省沈陽市鐵西區達標名校2025年下學期初三生物試題中考仿真模擬考試試卷(四)含解析
- 內蒙古醫科大學《智能制造系統架構》2023-2024學年第二學期期末試卷
- 延安大學《木版畫術科技能教學》2023-2024學年第二學期期末試卷
- 湛江幼兒師范專科學校《口腔臨床醫學概論(口腔修復學)》2023-2024學年第一學期期末試卷
- 四川鐵道職業學院《鋼筋混凝土與砌體結構設計》2023-2024學年第二學期期末試卷
- 茅臺學院《英國維多利亞文學》2023-2024學年第二學期期末試卷
- (二模)咸陽市2025年高考模擬檢測(二)語文試卷(含答案)
- 2025高校教資《高等教育法規》核心備考題庫(含典型題、重點題)
- sl582-2012水工金屬結構制造安裝質量檢驗通則
- 行政事業單位財務知識培訓
- 眼科中醫診療方案圓翳內障
- 路基路面壓實度評定自動計算表-標準-
- 信息技術(基礎模塊)課件 模塊三 電子表格處理
- 2025中考英語熱點話題閱讀《哪吒2魔童鬧海》
- 《實施方法論》課件
- 瘧疾2025培訓課件
- 流行性感冒診療方案(2025版)解讀課件
評論
0/150
提交評論