GlobalAlloc

GlobalAlloc是一個Windows API函式。該函式從堆中分配一定數目的位元組數。Win32記憶體管理器並不提供相互分開的局部和全局堆。提供這個函式只是為了與16位的Windows相兼容。簡稱全局堆分配

基本介紹

  • 中文名:GlobalAlloc
  • 性質:Windows API函式
  • 作用:從堆中分配一定數目的位元組數
  • 簡稱:全局堆分配
語法,參數,返回值,註解,需求,

語法

HGLOBALGlobalAlloc(
UINTuFlags, // 分配屬性(方式)
DWORDdwBytes // 分配的位元組數
);

參數

uFlags
指定如何分配記憶體,若指定為0,則是默認的GMEM_FIXED.這個值可以是下面其中一個或幾個位標識(那些指明不兼容的組合除外)
標識的含意
標識
意義
GHND
為GMEM_MOVEABLE 和 GMEM_ZEROINIT的組合.
GMEM_FIXED
分配固定的記憶體,返回值是一個指針.
GMEM_MOVEABLE
分配可移動的記憶體,在Win32中記憶體塊在物理記憶體中是不可移動的,但在預設堆中可以. 返回值是該記憶體對象的句柄,可使用函式 GlobalLock 將該句柄轉換為一個指針.
這個標識不能與 GMEM_FIXED 組合使用.
GMEM_ZEROINIT
將所申請記憶體初始化為0.
GPTR
為GMEM_FIXED和GMEM_ZEROINIT組合.
以下標識已經過時,均被忽略。這些標識只是為與16位Windows相兼容而提供的:
  • GMEM_DDESHARE:
    這個標識是為與16位Windows兼容而提供的,一些應用程式可使用該標識加強DDE操作的功能因此當記憶體用於DDE時可使用此標識.
    [DDE說明:DDE 是Dynamic Data Exchange 即動態數據交換。是 16 位 Windows 時代實現不同應用程式之間互相交換數據和控制的技術 ]
  • GMEM_DISCARDABLE 標識
    這個標識只是為與 16 位 Windows 相兼容而提供的。在 Win32 中你必須顯式地調用函式 GlobalDiscard 以拋棄一塊記憶體。這個標識可與 GMEM_FIXED 組合使用。
  • GMEM_LOWER
  • GMEM_NOCOMPACT
  • GMEM_NODISCARD
  • GMEM_NOT_BANKED
  • GMEM_NOTIFY
dwBytes
指定要申請的位元組數.若該參數為 0 且參數 uFlags 指定為 GMEM_MOVEABLE 則該函式返回一個記憶體對象的句柄,該記憶體對象被標識為discarded(可拋棄的)。

返回值

若函式調用成功,則返回一個新分配的記憶體對象的句柄
若函式調用失敗,則返回NULL。可調用GetLastError以獲得更多錯誤信息。

註解

如果堆內沒有足夠的空間滿足請求,函式將返回 NULL.因為NULL是用於標明錯誤的,所以不會分配虛擬0地址.
因此很容易檢測出是否在使用一個NULL指針
使用此函式分配記憶體可以保證8位元組的邊界.所有的記憶體均在執行訪問時創建;不需要特別的函式來動態執行所產生的代碼。
函式調用成功,將至少分配所需記憶體.若實際分配量超過所需,則記憶體仍然能夠充分利用之.可用函式 GlobalSize 來確定實際所分配的位元組數。
可使用 GlobalFree 來釋放記憶體。

需求

客戶端
需要Windows XP、Windows 2000 Professional、Windows NT Workstation、Windows Me、Windows 98或Windows 95.
伺服器
需要Windows Server 2003、Windows 2000 Server或Windows NT Server.
頭檔案
在Winbase.h中聲明,包含於Windows.h.
庫檔案
Link to Kernel32.lib.
DLL
需要Kernel32.dll.

相關詞條

熱門詞條

聯絡我們