-
GlobalAlloc
鎖定
GlobalAlloc是一個Windows API函數。該函數從堆中分配一定數目的字節數。Win32內存管理器並不提供相互分開的局部和全局堆。提供這個函數只是為了與16位的Windows相兼容。簡稱全局堆分配
- 中文名
- GlobalAlloc
- 性 質
- Windows API函數
- 作 用
- 從堆中分配一定數目的字節數
- 簡 稱
- 全局堆分配
GlobalAlloc語法
HGLOBALGlobalAlloc(
UINTuFlags, // 分配屬性(方式)
DWORDdwBytes // 分配的字節數
);
GlobalAlloc參數
uFlags
指定如何分配內存,若指定為0,則是默認的GMEM_FIXED.這個值可以是下面其中一個或幾個位標識(那些指明不兼容的組合除外)
標識的含意
標識 | 意義 |
---|---|
GHND | 為GMEM_MOVEABLE 和 GMEM_ZEROINIT的組合. |
GMEM_FIXED | 分配固定的內存,返回值是一個指針. |
GMEM_MOVEABLE | 這個標識不能與 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(可拋棄的)。
GlobalAlloc返回值
若函數調用成功,則返回一個新分配的內存對象的句柄。
若函數調用失敗,則返回NULL。可調用GetLastError以獲得更多錯誤信息。
GlobalAlloc註解
如果堆內沒有足夠的空間滿足請求,函數將返回 NULL.因為NULL是用於標明錯誤的,所以不會分配虛擬0地址.
因此很容易檢測出是否在使用一個NULL指針。
使用此函數分配內存可以保證8字節的邊界.所有的內存均在執行訪問時創建;不需要特別的函數來動態執行所產生的代碼。
若函數調用成功,將至少分配所需內存.若實際分配量超過所需,則內存仍然能夠充分利用之.可用函數 GlobalSize 來確定實際所分配的字節數。
可使用 GlobalFree 來釋放內存。
GlobalAlloc需求
客户端 | 需要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. |
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:16次歷史版本
- 最近更新: 杨家将1206