共用方式為


全域和區域函式

全域和本機函式支援從16位程式代碼移植,或維護與16位 Windows 的原始程式碼相容性。 從 32 位 Windows 開始,全域函式和本機函式會實作為包裝函式,以呼叫對應的 堆積函式, 使用處理程式的預設堆積句柄。 因此,全域和本機函式的額外負荷比其他記憶體管理功能更大。

堆積函式 提供比全域和本機函式更多的功能和控件。 除非檔特別指出應該使用全域或本機函式,否則新的應用程式應該使用堆積函式。 例如,某些 Windows 函式會配置記憶體,必須搭配 LocalFree釋放,而且全域函式仍會與動態數據交換 (DDE)、剪貼簿函式和 OLE 數據物件搭配使用。 如需全域和本機函式的完整清單,請參閱 記憶體管理函式中的數據表

Windows 記憶體管理不會提供個別的本機堆積和全域堆積,就像 16 位 Windows 一樣。 因此,全域和地方的函式系列是相等的,在函式之間選擇是個人偏好的問題。 請注意,從16位分段記憶體模型變更為32位虛擬記憶體模型,使得一些相關的全域和本機函式及其選項不必要或毫無意義。 例如,由於本機和全域配置都會傳回 32 位虛擬位址,因此不再有接近和遠的指標。

GlobalAllocLocalAlloc 所配置的記憶體物件是私用的已認可頁面,具有其他進程無法存取的讀取/寫入存取權。 使用 GlobalAlloc 搭配 GMEM_DDESHARE 配置的記憶體實際上不會與 16 位 Windows 中共用。 這個值沒有作用,而且僅適用於相容性。 需要共用記憶體以供其他用途的應用程式必須使用檔案對應物件。 多個進程可以對應相同檔案對應物件的檢視,以提供具名共享記憶體。 如需詳細資訊,請參閱 檔案對應

記憶體配置只受限於可用的物理記憶體,包括磁碟上分頁檔案中的記憶體。 當您配置固定記憶體時,GlobalAllocLocalAlloc 傳回呼叫進程可以立即用來存取記憶體的指標。 當您配置可移動的記憶體時,傳回值是句柄。 若要取得可移動記憶體物件的指標,請使用 GlobalLockLocalLock 函式。

配置之內存的實際大小可以大於要求的大小。 若要判斷配置的實際位元組數目,請使用 GlobalSizeLocalSize 函式。 如果配置的數量大於所要求的數量,則進程可以使用整個金額。

GlobalReAllocLocalReAlloc 函式會變更 globalAllocLocalAlloc所配置的記憶體物件大小或屬性。 大小可能會增加或減少。

GlobalFreeLocalFree 函式會釋放由 globalAlloc、localAlloc LocalAllocGlobalReAllocLocalReAlloc所配置的記憶體。 若要捨棄指定的記憶體物件而不使句柄失效,請使用 GlobalDiscardLocalDiscard 函式。 稍後 GlobalReAllocLocalReAlloc,即可使用此句柄,以配置與相同句柄相關聯的新記憶體區塊。

若要傳回指定記憶體物件的相關信息,請使用 GlobalFlagsLocalFlags 函式。 此資訊包含對象的鎖定計數,並指出對像是可捨棄還是已經捨棄。 若要將句柄傳回與指定指標相關聯的記憶體物件,請使用 globalHandleLocalHandle 函式。

比較記憶體配置方法