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

colorful

zc qq:1337220912

 

LocalAlloc,VirtualAlloc,malloc,new的異同

   首先明白幾個(gè)概念:虛擬內(nèi)存是從硬盤(pán)置換出來(lái)的,堆本身就是內(nèi)存,程序運(yùn)行時(shí),可用內(nèi)存=物理內(nèi)存+虛擬內(nèi)存。虛擬內(nèi)存一般用文件來(lái)保存數(shù)據(jù),虛擬內(nèi)存的 出現(xiàn)主要是因?yàn)橐郧皟?nèi)存不夠(16M的內(nèi)存剛出來(lái)的時(shí)候可是天價(jià)啊),磁盤(pán)相對(duì)便宜一些,所以聰明的系統(tǒng)設(shè)計(jì)者就把設(shè)計(jì)了虛擬內(nèi)存,在程序運(yùn)行的時(shí)候把那 些很久沒(méi)有被訪(fǎng)問(wèn)過(guò)的(可能以后也不會(huì)用到)內(nèi)存映射到文件里面去(以后需要的時(shí)候再讀進(jìn)內(nèi)存),把內(nèi)存騰出來(lái)給真正需要執(zhí)行的代碼和數(shù)據(jù),這樣看起來(lái)可 用內(nèi)存就比物理內(nèi)存多了。
       HeapAlloc()是堆分配內(nèi)存函數(shù),查看c,c++的malloc,new函數(shù)的代碼,可以看到就是對(duì)HeapAlloc()函數(shù)的封裝,在堆上可以動(dòng)態(tài)分配內(nèi)存。
1. 首先我們來(lái)看HeapAlloc:
MSDN 上的解釋為:HeapALloc是從堆上分配一塊內(nèi)存,且分配的內(nèi)存是不可移動(dòng)的(即如果沒(méi)有連續(xù)的空間能滿(mǎn)足分配的大小,程序不能將其他零散的 空間利用起來(lái),從而導(dǎo)致分配失敗),該分配方法是從一指定地址開(kāi)始分配,而不像GloabalAlloc是從全局堆上分配,這個(gè)有可能是全局,也有可能是 局部。函數(shù)原型為:
LPVOID
HeapAlloc(
    HANDLE hHeap,
    DWORD dwFlags,
   SIZE_T dwBytes
    );
hHeap是進(jìn)程堆內(nèi)存開(kāi)始位置。
dwFlags是分配堆內(nèi)存的標(biāo)志。包括HEAP_ZERO_MEMORY,即使分配的空間清零。
dwBytes是分配堆內(nèi)存的大小。
其對(duì)應(yīng)的釋放空間函數(shù)為HeapFree。
2. 再看GlobalAlloc:該函數(shù)用于從全局堆中分配出內(nèi)存供程序使用,函數(shù)原型為:
HGLOBAL GlobalAlloc(
UINT uFlags,
SIZE_T dwBytes
);
uFlags參數(shù)含義
GHND   GMEM_MOVEABLE和GMEM_ZEROINIT的組合
GMEM_FIXED   分配固定內(nèi)存,返回值是一個(gè)指針
GMEM_MOVEABLE   分配活動(dòng)內(nèi)存,在Win32中,內(nèi)存塊不能在物理內(nèi)存中移動(dòng),但能在默認(rèn)的堆中移動(dòng)。返回值是內(nèi)存對(duì)象的句柄,用函數(shù)GlobalLock可將句柄轉(zhuǎn)化為指針
GMEM_ZEROINIT   將內(nèi)存內(nèi)容初始化為零
GPTR   GMEM_FIXED和GMEM_ZEROINIT的組合
一 般情況下我們?cè)诰幊痰臅r(shí)候,給應(yīng)用程序分配的內(nèi)存都是可以移動(dòng)的或者是可以丟棄的,這樣能使有限的內(nèi)存資源充分利用,所以,在某一個(gè)時(shí)候我們分配的那塊 內(nèi)存的地址是不確定的,因?yàn)樗强梢砸苿?dòng)的,所以得先鎖定那塊內(nèi)存塊,這兒應(yīng)用程序需要調(diào)用API函數(shù)GlobalLock函數(shù)來(lái)鎖定句柄。如下: lpMem=GlobalLock(hMem); 這樣應(yīng)用程序才能存取這塊內(nèi)存。所以我們?cè)谑褂肎lobalAllock時(shí),通常搭配使用GlobalLock,當(dāng)然在不使用內(nèi)存時(shí),一定記得使用 GlobalUnlock,否則被鎖定的內(nèi)存塊一直不能被其他變量使用。
GlobalAlloc對(duì)應(yīng)的釋放空間的函數(shù)為GlobalFree。
3. LocalAlloc:該函數(shù)用于從局部堆中分配內(nèi)存供程序使用,函數(shù)原型為:
HLOCAL LocalAlloc(
UINT uFlags,
SIZE_T uBytes
);
參數(shù)同GlobalAlloc。
在 16位Windows中是有區(qū)別的,因?yàn)樵?6位windows用一個(gè)全局堆和局部堆來(lái)管理內(nèi)存,每一個(gè)應(yīng)用程序或dll裝入內(nèi)存時(shí),代碼段被裝入全局 堆,而系統(tǒng)又為每個(gè)實(shí)例從全局堆中分配了一個(gè)64kb的數(shù)據(jù)段作為該實(shí)例的局部堆,用來(lái)存放應(yīng)用程序的堆棧和所有全局或靜態(tài)變量。而 LocalAlloc/GlobalAlloc就是分別用于在局部堆或全局堆中分配內(nèi)存。
由于每個(gè)進(jìn)程的局部堆很小,所以在局部堆中分配內(nèi)存會(huì)受到空間的限制。但這個(gè)堆是每個(gè)進(jìn)程私有的,相對(duì)而言分配數(shù)據(jù)較安全,數(shù)據(jù)訪(fǎng)問(wèn)出錯(cuò)不至于影響到整個(gè)系統(tǒng)。
而在全局堆中分配的內(nèi)存是為各個(gè)進(jìn)程共享的,每個(gè)進(jìn)程只要擁有這個(gè)內(nèi)存塊的句柄都可以訪(fǎng)問(wèn)這塊內(nèi)存,但是每個(gè)全局內(nèi)存空間需要額外的內(nèi)存開(kāi)銷(xiāo),造成分配浪費(fèi)。而且一旦發(fā)生嚴(yán)重錯(cuò)誤,可能會(huì)影響到整個(gè)系統(tǒng)的穩(wěn)定。
不 過(guò)在Win32中,每個(gè)進(jìn)程都只擁有一個(gè)省缺的私有堆,它只能被當(dāng)前進(jìn)程訪(fǎng)問(wèn)。應(yīng)用程序也不可能直接訪(fǎng)問(wèn)系統(tǒng)內(nèi)存。所以在Win32中全局堆和局部堆都 指向進(jìn)程的省缺堆。用LocalAlloc/GlobalAlloc分配內(nèi)存沒(méi)有任何區(qū)別。甚至LocalAlloc分配的內(nèi)存可以被 GlobalFree釋放掉。所以在Win32下編程,無(wú)需注意Local和Global的區(qū)別,一般的內(nèi)存分配都等效于 HeapAlloc(GetProcessHeap(),...)。
LocalAlloc對(duì)應(yīng)的釋放函數(shù)為L(zhǎng)ockFree。
4. VirtualAlloc:該函數(shù)的功能是在調(diào)用進(jìn)程的虛地址空間,預(yù)定或者提交一部分頁(yè),如果用于內(nèi)存分配的話(huà),并且分配類(lèi)型未指定MEM_RESET,則系統(tǒng)將自動(dòng)設(shè)置為0;其函數(shù)原型:
LPVOID VirtualAlloc(
LPVOID lpAddress, // region to reserve or commit
SIZE_T dwSize, // size of region
DWORD flAllocationType, // type of allocation
DWORD flProtect // type of access protection
);
VirtualAlloc 可以通過(guò)并行多次調(diào)用提交一個(gè)區(qū)域的部分或全部來(lái)保留一個(gè)大的內(nèi)存區(qū)域。多重調(diào)用提交同一塊區(qū)域不會(huì)引起失敗。這使得一個(gè)應(yīng)用程 序保留內(nèi)存后可以隨意提交將被寫(xiě)的頁(yè)。當(dāng)這種方式不在有效的時(shí)候,它會(huì)釋放應(yīng)用程序通過(guò)檢測(cè)被保留頁(yè)的狀態(tài)看它是否在提交調(diào)用之前已經(jīng)被提交。
VirtualAlloc對(duì)應(yīng)的釋放函數(shù)為VirtualFree。
5.Malloc:malloc 與free是C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。對(duì)于非內(nèi)部數(shù)據(jù)類(lèi)型的對(duì)象而言,光用 malloc/free無(wú)法滿(mǎn)足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。由于malloc/free是 庫(kù)函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。
6.New:new/delete 是C++的運(yùn)算符??捎糜谏暾?qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。C++語(yǔ)言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new, 以一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符delete。注意new/delete不是庫(kù)函數(shù)。C++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc /free管理動(dòng)態(tài)內(nèi)存。new 是個(gè)操作符,和什么"+","-","="...有一樣的地位.
        malloc是個(gè)分配內(nèi)存的函數(shù),供你調(diào)用的.
        new是保留字,不需要頭文件支持.
        malloc需要頭文件庫(kù)函數(shù)支持.new 建立的是一個(gè)對(duì)象,
        malloc分配的是一塊內(nèi)存.
        new建立的對(duì)象你可以把它當(dāng)成一個(gè)普通的對(duì)象,用成員函數(shù)訪(fǎng)問(wèn),不要直接訪(fǎng)問(wèn)它的地址空間
        malloc分配的是一塊內(nèi)存區(qū)域,就用指針訪(fǎng)問(wèn)好了,而且還可以在里面移動(dòng)指針.
內(nèi)存泄漏對(duì)于malloc或者new都可以檢查出來(lái)的,區(qū)別在于new可以指明是那個(gè)文件的那一行,而malloc沒(méi)有這些信息。new可以認(rèn)為是malloc加構(gòu)造函數(shù)的執(zhí)行。new出來(lái)的指針是直接帶類(lèi)型信息的。而malloc返回的都是void指針。

posted on 2012-05-18 10:29 多彩人生 閱讀(511) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(3)

隨筆分類(lèi)

隨筆檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩国产中文| 亚洲精品视频中文字幕| 国产精品久久久久久亚洲毛片| 国产精品久久久久av免费| 一区二区欧美精品| 亚洲欧洲日本国产| 欧美不卡高清| 国产精品一区二区三区久久| 亚洲日韩第九十九页| 欧美自拍偷拍午夜视频| 亚洲国产一区在线| 久久久av水蜜桃| 韩日成人av| 麻豆freexxxx性91精品| 亚洲一区二区高清视频| 亚洲夫妻自拍| 欧美精选午夜久久久乱码6080| 亚洲国产精品久久久| 久久色中文字幕| 久久大香伊蕉在人线观看热2| 国产精品露脸自拍| 亚洲一区二区三区高清不卡| 99国产精品| 欧美日韩国产系列| 一区二区三区四区国产| 亚洲精品在线一区二区| 国产精品九九| 欧美影院在线| 久久久噜噜噜久噜久久| 91久久精品日日躁夜夜躁国产| 猛男gaygay欧美视频| 卡一卡二国产精品| 亚洲人午夜精品| 日韩午夜精品| 国产免费亚洲高清| 久久一二三国产| 欧美极品在线视频| 亚洲自拍三区| 久久精品国产亚洲aⅴ| 亚洲福利av| 亚洲精品影视在线观看| 国产精品伊人日日| 免费视频一区二区三区在线观看| 狂野欧美一区| 亚洲一级一区| 久久电影一区| 一区二区三欧美| 久久国产视频网| 亚洲最黄网站| 久久成人羞羞网站| 中日韩高清电影网| 久久高清免费观看| 99精品国产99久久久久久福利| 亚洲网站在线播放| 亚洲国产精品电影| 在线亚洲欧美| 亚洲国产精品成人| 亚洲欧美国产va在线影院| 亚洲国产成人久久综合| 亚洲一区二区三区四区视频| 亚洲第一在线| 亚洲欧美日韩国产成人精品影院 | 欧美sm重口味系列视频在线观看| 欧美xxx成人| 久久国产精彩视频| 欧美日韩一视频区二区| 麻豆精品一区二区综合av| 国产精品国产三级国产专区53| 牛牛精品成人免费视频| 国产精品婷婷午夜在线观看| 亚洲精品免费观看| 亚洲国产精品久久人人爱蜜臀| 性做久久久久久久免费看| 亚洲视频欧美在线| 欧美成人影音| 欧美成人国产| 国内一区二区三区| 午夜一区在线| 亚洲欧美日韩另类精品一区二区三区| 免费观看欧美在线视频的网站| 欧美在线视频免费| 欧美视频在线播放| 亚洲看片网站| 99这里有精品| 欧美激情导航| 亚洲国产精品美女| 亚洲国产视频直播| 久热精品视频在线观看| 女仆av观看一区| 很黄很黄激情成人| 久久成年人视频| 久久久久久亚洲精品不卡4k岛国| 国产精品女同互慰在线看| 妖精成人www高清在线观看| 夜夜嗨av一区二区三区网页| 欧美高清自拍一区| 亚洲国产综合在线看不卡| 亚洲人屁股眼子交8| 欧美激情一区二区三区四区| 亚洲盗摄视频| 99国产精品视频免费观看| 欧美成人精品不卡视频在线观看| 亚洲第一黄色| 亚洲三级毛片| 欧美日韩色婷婷| 亚洲少妇诱惑| 久久精品国产亚洲精品| 国内久久视频| 美女国产一区| 亚洲欧洲在线观看| 亚洲一级黄色av| 国产视频一区在线观看| 欧美一乱一性一交一视频| 久久中文字幕一区| 亚洲日本aⅴ片在线观看香蕉| 女仆av观看一区| 日韩一级成人av| 午夜精品久久久久久久白皮肤| 国产毛片一区二区| 久久中文久久字幕| 91久久久久久国产精品| 亚洲性xxxx| 国产自产精品| 欧美极品色图| 欧美一区二区黄色| 欧美激情亚洲自拍| 亚洲欧美日韩国产综合| 国产一在线精品一区在线观看| 久久嫩草精品久久久精品| 亚洲区欧美区| 久久狠狠亚洲综合| 日韩亚洲欧美成人| 国产欧美日韩另类视频免费观看| 亚洲福利视频专区| 亚洲一二三区精品| 亚洲国产高清在线观看视频| 欧美视频不卡| 欧美成人午夜免费视在线看片| 亚洲午夜精品在线| 亚洲国产成人午夜在线一区| 亚洲欧美日韩精品久久久久| 樱桃国产成人精品视频| 欧美婷婷久久| 久久青青草原一区二区| 亚洲欧美电影院| 日韩视频在线一区二区三区| 久久字幕精品一区| 午夜精品福利一区二区蜜股av| 亚洲国产婷婷香蕉久久久久久| 国产精品男女猛烈高潮激情| 欧美久久九九| 免费视频一区| 亚洲欧美一区二区原创| 亚洲国产欧美不卡在线观看| 久久精品99无色码中文字幕| 亚洲另类自拍| 在线国产日韩| 国产一区三区三区| 国产精品永久入口久久久| 欧美精品午夜视频| 久久综合给合久久狠狠狠97色69| 亚洲小视频在线观看| 亚洲欧洲一区| 亚洲国产成人久久综合一区| 另类春色校园亚洲| 久久激情婷婷| 欧美一区二区三区在线| 亚洲一区精彩视频| 这里只有精品丝袜| 9色porny自拍视频一区二区| 亚洲国产欧美一区二区三区久久 | 欧美精品一区二区三区很污很色的| 欧美一区免费| 欧美一级视频精品观看| 亚洲免费在线看| 亚洲一二区在线| 中文亚洲视频在线| 夜夜嗨一区二区三区| 亚洲精品乱码久久久久久久久 | 久久综合久久久久88| 久久九九99视频| 久久精品女人| 久久免费视频在线| 久久综合网络一区二区| 久久麻豆一区二区| 久久这里只有精品视频首页| 美女性感视频久久久| 免费在线日韩av| 亚洲成人在线视频网站| 亚洲日本中文字幕区| 99re6热在线精品视频播放速度| 亚洲黄色一区| 99综合视频| 亚洲综合色网站| 久久成人免费电影| 老司机免费视频一区二区| 欧美激情aⅴ一区二区三区 | 亚洲另类一区二区| 国产精品99久久不卡二区| 午夜在线a亚洲v天堂网2018|