全域和區域函式

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

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

Windows 記憶體管理不會提供個別的本機堆積和全域堆積,因為 16 位 Windows。 因此,全域和區域函式系列是相等的,而且在函式之間選擇是個人喜好設定的事項。 請注意,從 16 位分段記憶體模型變更為 32 位虛擬記憶體模型,已讓一些相關的全域和本機函式及其選項不必要或無意義。 例如,由於本機和全域配置都會傳回 32 位虛擬位址,因此不再接近和遠端指標。

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

記憶體配置僅受限於可用的實體記憶體,包括磁片上分頁檔案中的儲存體。 當您配置固定記憶體時, GlobalAllocLocalAlloc 會傳回呼叫進程可立即用來存取記憶體的指標。 當您配置可移動的記憶體時,傳回值是控制碼。 若要取得可移動記憶體物件的指標,請使用 GlobalLockLocalLock 函式。

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

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

GlobalFreeLocalFree函式會釋放GlobalAllocLocalAllocGlobalReAllocLocalReAlloc所配置的記憶體。 若要捨棄指定的記憶體物件而不使控制碼失效,請使用 GlobalDiscardLocalDiscard 函數。 GlobalReAllocLocalReAlloc稍後可以使用控制碼來配置與相同控制碼相關聯的新記憶體區塊。

若要傳回指定記憶體物件的相關資訊,請使用 GlobalFlagsLocalFlags 函式 。 此資訊包括物件的鎖定計數,並指出物件是可捨棄還是已經捨棄。 若要將控制碼傳回與指定指標相關聯的記憶體物件,請使用 GlobalHandleLocalHandle 函式。

比較記憶體配置方法