• <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>
            <2009年9月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            • 隨筆 - 21
            • 文章 - 0
            • 評論 - 2
            • 引用 - 0

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            HeapAlloc GlobalAlloc new等內存分配的區別

            GlobalAlloc是標準內存管理函數,標準內存管理函數都是操作進程的默認堆,所以這個函數是從進程的默認堆中分配內存空間,分配的空間可以是可移動的也可以是不可移動的。可移動的內存是指Windows在需要的時候可以將這個內存移動到另外一個地址.

             

            關于GlobalAlloc and LocalAlloc,from MSDN  
               
              The global and local functions supported for porting from 16-bit code, or maintaining source code compatibility with 16-bit Windows. The global and local functions are slower   than other memory management functions and do not provide as many features. Therefore,  new   applications should use the heap functions.However, the global functions are still used with DDE and the clipboard functions.  
               
              Windows memory management does not provide a separate local heap and global heap, as 16-bit Windows does. As a result, there is no difference between the memory objects allocated by the GlobalAlloc and LocalAlloc functions. In addition, the change from a 16-bit segmented memory model to a 32-bit virtual memory model has made some of the related global and local functions and their options unnecessary or meaningless. For example, there are no longer near and far pointers, because both local and global allocations return 32-bit virtual addresses.
             
              Memory objects allocated by GlobalAlloc and LocalAlloc are in private, committed pages with read/write access that cannot be accessed by other processes. Memory allocated by using GlobalAlloc with GMEM_DDESHARE is not actually shared globally as it is in 16-bit Windows. This value has no effect and is available only for compatibility. Applications requiring shared memory for other purposes must use file-mapping objects. Multiple processes can map a view of the same file-mapping object to provide named shared memory. For more information, see File Mapping.

            HeapAllock是堆管理函數,堆管理函數可以操作非默認堆(當然也可以操作默認堆),創建一個堆是用HeapCreate,這個函數返回一個堆句 柄,然后可以用在HeapAllock函數中,即從返回的這個堆中申請內存空間,HeapAllock申請的內存只能是不可以移動的.

            而new則是c++的標準函數,在Windows的VC++編譯器中,new在申請內存時最終調用的是GlabalAlloc,不過new還可以調用類的構造函數.

            Windows的內存管理除了標準內存管理函數和堆管理函數之外,還有更加底層的虛擬內存管理函數,VirtualAlloc就是一個虛擬內存管理函數.

             

            Personal Comprehension

            GlobalAlloc分配的內存,還可以調用GlobalLock鎖定該內存塊(該函數可以被多次調用),在我們沒有調用GlobalUnlock之 前,該內存塊會一直保持有效(即使調用了GlobalFree函數,但如果該內存的鎖計數不為0,該內存塊也不會被釋放掉,依然保持有效)!而如果只調用 一次delete,則使用new所分配的內存就會被釋放掉.

            posted on 2009-09-06 21:50 ChinaPanda 閱讀(660) 評論(0)  編輯 收藏 引用 所屬分類: windows

            国产亚州精品女人久久久久久| 久久精品国产免费观看三人同眠| 777米奇久久最新地址| 国产精品久久久久AV福利动漫| 国产精品美女久久久| 亚洲精品无码久久毛片| 久久久亚洲欧洲日产国码aⅴ| 成人a毛片久久免费播放| 久久成人国产精品免费软件| 久久亚洲国产午夜精品理论片| 亚洲欧洲精品成人久久曰影片| 国产精品久久久天天影视| 久久笫一福利免费导航| 伊人久久大香线蕉影院95| 日韩精品久久无码人妻中文字幕| 国产精品成人99久久久久| 69国产成人综合久久精品| 综合久久精品色| 久久久久久国产a免费观看不卡| 久久国产精品99国产精| 久久久久久久综合狠狠综合| 国产亚洲美女精品久久久| 国产精品久久久久久搜索| 久久久久久国产精品无码超碰| 中文字幕精品无码久久久久久3D日动漫 | 久久免费视频网站| 精品久久久无码人妻中文字幕豆芽 | 青草国产精品久久久久久| 无码任你躁久久久久久老妇| 国产999精品久久久久久| 国产成人久久激情91| 99久久国语露脸精品国产| 久久久久久亚洲Av无码精品专口 | 国产精品久久久久蜜芽| 久久久久人妻一区精品| 伊人久久综在合线亚洲2019| 国产福利电影一区二区三区久久久久成人精品综合 | 狠狠色婷婷久久综合频道日韩 | 久久久不卡国产精品一区二区| 国产精品久久久久天天影视| 国产成人综合久久综合|