青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

new 和 malloc

malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用于申請動態內存和釋放內存。 ?
? 對于非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函 數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。 ?
? 因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。 ?
? 我們先看一看malloc/free和new/delete如何實現對象的動態內存管理。 ?
? ?
? class ? Obj ?
? { ?
? public ? : ?
? Obj(void){ ? cout ? << ? “Initialization” ? << ? endl; ? } ?
? ~Obj(void){ ? cout ? << ? “Destroy” ? << ? endl; ? } ?
? void Initialize(void){ ? cout ? << ? “Initialization” ? << ? endl; ? } ?
? void ? ? ? ? Destroy(void){ ? cout ? << ? “Destroy” ? << ? endl; ? } ?
? }; ?
? void ? UseMallocFree(void) ?
? { ?
? Obj ? ? *a ? = ? (obj ? *)malloc(sizeof(obj)); // ? 申請動態內存 ?
? a->Initialize(); // ? 初始化 ?
? //… ?
? a->Destroy(); // ? 清除工作 ?
? free(a); // ? 釋放內存 ?
? } ?
? void ? UseNewDelete(void) ?
? { ?
? Obj ? ? *a ? = ? new ? Obj; // ? 申請動態內存并且初始化 ?
? //… ?
? delete ? a; // ? 清除并且釋放內存 ?
? } ?
? ? 用malloc/free和new/delete如何實現對象的動態內存管理 ?
? ?
? 類Obj的函數Initialize模擬了構造函數的功能,函數Destroy模擬了析構函數的功能。函數UseMallocFree中,由于 malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。函數 UseNewDelete則簡單得多。 ?
? 所以我們不要企圖用malloc/free來完成動態對象的內存管理,應該用new/delete。由于內部數據類型的“對象”沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的。 ?
? 既然new/delete的功能完全覆蓋了malloc/free,為什么C++不把malloc/free淘汰出局呢?這是因為C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。 ?
? 如果用free釋放“new創建的動態對象”,那么該對象因無法執行析構函數而可能導致程序出錯。如果用delete釋放“malloc申請的動態內 存”,理論上講程序不會出錯,但是該程序的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。??
函數malloc的原型如下: ?
? void ? * ? malloc(size_t ? size); ?
? 用malloc申請一塊長度為length的整數類型的內存,程序如下: ?
? int ? ? *p ? = ? (int ? *) ? malloc(sizeof(int) ? * ? length); ?
? 我們應當把注意力集中在兩個要素上:“類型轉換”和“sizeof”。 ?
? malloc返回值的類型是void ? *,所以在調用malloc時要顯式地進行類型轉換,將void ? * ? 轉換成所需要的指針類型。malloc函數本身并不識別要申請的內存是什么類型,它只關心內存的總字節數。我們通常記不住int, ? float等數據類型的變量的確切字節數。 ?
? ?
? 運算符new使用起來要比函數malloc簡單得多,例如: ?
? int ? ? *p1 ? = ? (int ? *)malloc(sizeof(int) ? * ? length); ?
? int ? ? *p2 ? = ? new ? int[length]; ?
? 這是因為new內置了sizeof、類型轉換和類型安全檢查功能。對于非內部數據類型的對象而言,new在創建動態對象的同時完成了初始化工作。如果對象有多個構造函數,那么new的語句也可以有多種形式。例如 ?
? class ? Obj ?
? { ?
? public ? : ?
? Obj(void); // ? 無參數的構造函數 ?
? Obj(int ? x); // ? 帶一個參數的構造函數 ?
? … ?
? } ?
? void ? Test(void) ?
? { ?
? Obj ? ? *a ? = ? new ? Obj; ?
? Obj ? ? *b ? = ? new ? Obj(1); // ? 初值為1 ?
? … ?
? delete ? a; ?
? delete ? b; ?
? } ?
? 如果用new創建對象數組,那么只能使用對象的無參數構造函數。
?
區別兩個 ?
? ?
? 1 ? new是操作符 ?
? ? ? malloc是庫函數 ?
? ?
? 2 ? new可以調用構造函數,malloc不可以 ?
? ?
? ?
? 還有,這兩個函數不存在內存分配大小問題 ?
? 這兩個操作是在堆里面申請內存空間,除非空間不夠了,返回BULL指針,否則都沒有問題的,如果你出現了某種情況,看看是不是其它的問題。??
new ? 最終調用的是HeapAlloc,而HeapAlloc聲明如下: ?
? LPVOID ? HeapAlloc( ?
? ? ? HANDLE ? hHeap, ? ? // ? handle ? to ? the ? private ? heap ? block ?
? ? ? DWORD ? dwFlags, ? // ? heap ? allocation ? control ? flags ?
? ? ? DWORD ? dwBytes ? ? // ? number ? of ? bytes ? to ? allocate ?
? ); ?
? 其中第一個參數必須是HeapCreate或GetProcessHeap ? 函數的返回句柄。 ?
? 如果是HeapCreate的話(如下:) ?
? HANDLE ? HeapCreate( ?
? ? ? DWORD ? flOptions, ? ? ? ? ? ? // ? heap ? allocation ? flag ?
? ? ? DWORD ? dwInitialSize, ? ? // ? initial ? heap ? size ?
? ? ? DWORD ? dwMaximumSize ? ? ? // ? maximum ? heap ? size ?
? ); ?
? 那么當該函數的最后一個參數非0時,所創建的堆要比0x7FFF8(512k)略小。如果為0,則大小受到可用內存的限制。 ?
? 還有,new申請的內存不可移動,會造成內存碎片。
?
?
內存分配最終都堆(HEAP)上操作,允許的最大空間是_HEAP_MAXREQ=0xFFFFFFE0,但C運行庫會在每次額外分配一個 _CrtMemBlockHeader結構在該次分配的內存起始處,同時在結束處多分配nNoMansLadnSize=4個字節的內存用于檢測檢查調 試.因此通常的高效內存管理技術都是將多次小空間分配合并成一次大空間分配,或只進行一次分配,回收時不釋放以直接用于下次分配的 ? . ?
? 可分配空間并不等于一定可以分配到,這受環境的直接影響,如頁文件的大小,系統已經占用的空間等. ?
? 當所給參數太大,會有運行時警告:Invalid ? allocation ? size: ? %u ? bytes.

posted on 2007-10-29 00:50 旅途 閱讀(632) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美韩日一区| 欧美中文在线视频| 亚洲在线免费| 亚洲一区观看| 亚洲一区二区在线免费观看| 亚洲一区中文| 欧美在线免费播放| 亚洲欧美成人网| 国产精品久久久久久久午夜| 欧美精品乱码久久久久久按摩| 欧美精品91| 中日韩视频在线观看| 欧美777四色影视在线| 国产精品久99| 99精品视频免费观看| 欧美一站二站| 亚洲欧美另类在线| 欧美成人精品在线| 亚洲福利视频网| 日韩亚洲一区二区| 亚洲国产精品www| 亚洲女同精品视频| 欧美另类高清视频在线| 亚洲第一精品福利| 久久激情五月婷婷| 欧美成人免费大片| 亚洲国产欧美精品| 免费观看30秒视频久久| 亚洲午夜精品网| 国产日韩欧美电影在线观看| 国产精品久久久久永久免费观看 | 在线视频精品| 女女同性精品视频| 国产伦理一区| 久久精品观看| 久久精品99| 日韩午夜在线电影| 久久久久国产一区二区三区| 国产午夜亚洲精品羞羞网站| 午夜精品福利视频| 久久久久久久激情视频| 亚洲午夜成aⅴ人片| 国内精品久久久久久久影视蜜臀 | 亚洲国产cao| 免费在线看成人av| 欧美精品色网| 免费欧美网站| 亚洲国产精品日韩| 欧美在线在线| 亚洲精一区二区三区| 性欧美18~19sex高清播放| 欧美日韩国产在线播放| 亚洲国产老妈| 欧美制服丝袜| 亚洲小说欧美另类婷婷| 欧美亚洲日本网站| 欧美v亚洲v综合ⅴ国产v| 亚洲人成网站999久久久综合| 久久午夜精品一区二区| 亚洲精品在线二区| 久久99在线观看| 亚洲激情午夜| 国产裸体写真av一区二区| 美日韩免费视频| 一区二区三区四区五区在线 | 欧美激情中文字幕一区二区| 日韩午夜中文字幕| 欧美.com| 久久www免费人成看片高清| 亚洲激情视频| 在线成人性视频| 国产精品丝袜xxxxxxx| 亚洲桃色在线一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩一级大片| 亚洲国产日韩综合一区| 国产视频久久网| 欧美午夜视频在线观看| 欧美jizz19性欧美| 欧美在线看片| 久久三级视频| 久久精品在线观看| 久久国产99| 午夜精品视频| 亚洲欧美日韩综合aⅴ视频| 亚洲深爱激情| 亚洲女爱视频在线| 9人人澡人人爽人人精品| 欧美激情精品久久久六区热门| 麻豆freexxxx性91精品| 久久欧美肥婆一二区| 久久视频一区二区| 亚洲欧美亚洲| 久久久国产精品一区二区中文| 欧美在线视频全部完| 久久久精品免费视频| 久久综合影视| 亚洲国产女人aaa毛片在线| 欧美国产一区二区三区激情无套| 美女主播视频一区| 亚洲激情在线观看视频免费| 日韩午夜电影| 夜夜嗨av一区二区三区| 欧美自拍偷拍午夜视频| 久久综合九色综合久99| 午夜视频一区| 欧美肥婆在线| 一本久道久久综合婷婷鲸鱼| 亚洲一区亚洲| 美国成人毛片| 国产一区在线视频| 日韩视频免费观看高清在线视频| 亚洲欧美日韩在线高清直播| 美女网站久久| 亚洲经典三级| 久久青草欧美一区二区三区| 欧美日韩国产综合新一区| 国模套图日韩精品一区二区| 99re6热只有精品免费观看| 亚洲视频播放| 亚洲精品久久久久| 久久嫩草精品久久久精品| 国产精品嫩草99av在线| 亚洲美女在线国产| 亚洲经典三级| 欧美日韩在线亚洲一区蜜芽| 亚洲图片在线观看| 久久影院亚洲| 欧美一区二区视频免费观看 | 久久天天躁狠狠躁夜夜爽蜜月| 久久免费精品日本久久中文字幕| 亚洲美女视频| 欧美在线观看你懂的| 99re66热这里只有精品3直播 | 亚洲国产91| 日韩视频三区| 国产欧美午夜| 美脚丝袜一区二区三区在线观看| 久久香蕉国产线看观看av| 99视频精品全国免费| 中文一区字幕| 在线高清一区| 中文网丁香综合网| 亚洲一区二区三区在线视频| 一区二区视频欧美| 久久久久九九九| 欧美精品午夜视频| 久久综合五月| 国产欧美日韩三级| 亚洲高清123| 国产日产亚洲精品| 亚洲日韩欧美视频一区| 国产亚洲午夜高清国产拍精品| 你懂的国产精品| 国产农村妇女精品一二区| 亚洲电影欧美电影有声小说| 国产女主播视频一区二区| 久久综合久久美利坚合众国| 国产精品一区视频网站| 亚洲精品国产精品国自产观看| 亚洲成在人线av| 欧美专区中文字幕| 西西人体一区二区| 国产精品免费一区二区三区在线观看| 亚洲国内精品在线| 一区二区三区精品久久久| 欧美日韩国产bt| 99精品热6080yy久久| 久久久久久一区二区| 亚洲精品免费在线播放| 国产精品视频xxxx| 亚洲亚洲精品三区日韩精品在线视频| 亚洲免费观看| 欧美日韩在线一区| 午夜精品久久久久久久99樱桃 | 亚洲视频一二| 久久午夜影视| 欧美亚洲一区| 亚洲成人资源| 亚洲综合色丁香婷婷六月图片| 欧美调教vk| 久久久91精品国产一区二区三区| 欧美99在线视频观看| 亚洲私人影院在线观看| 亚洲欧美日韩综合一区| 亚洲欧美日韩精品综合在线观看| 一区二区三区www| 国产一区二区在线免费观看| 欧美不卡激情三级在线观看| 亚洲理伦在线| 可以免费看不卡的av网站| 亚洲视频1区2区| 最新国产精品拍自在线播放| 国产日本欧美在线观看 | 亚洲国产精品一区二区第一页| 亚洲免费av网站| 亚洲缚视频在线观看| 黄色成人av在线| 欧美韩国在线| 欧美视频一区二区三区…|