全域和區域函式
全域和本機函式支援從16位程式代碼移植,或維護與16位 Windows 的原始程式碼相容性。 從 32 位 Windows 開始,全域函式和本機函式會實作為包裝函式,以呼叫對應的 堆積函式, 使用處理程式的預設堆積句柄。 因此,全域和本機函式的額外負荷比其他記憶體管理功能更大。
堆積函式 提供比全域和本機函式更多的功能和控件。 除非檔特別指出應該使用全域或本機函式,否則新的應用程式應該使用堆積函式。 例如,某些 Windows 函式會配置記憶體,必須搭配 LocalFree釋放,而且全域函式仍會與動態數據交換 (DDE)、剪貼簿函式和 OLE 數據物件搭配使用。 如需全域和本機函式的完整清單,請參閱 記憶體管理函式中的數據表。
Windows 記憶體管理不會提供個別的本機堆積和全域堆積,就像 16 位 Windows 一樣。 因此,全域和地方的函式系列是相等的,在函式之間選擇是個人偏好的問題。 請注意,從16位分段記憶體模型變更為32位虛擬記憶體模型,使得一些相關的全域和本機函式及其選項不必要或毫無意義。 例如,由於本機和全域配置都會傳回 32 位虛擬位址,因此不再有接近和遠的指標。
GlobalAlloc 和 LocalAlloc 所配置的記憶體物件是私用的已認可頁面,具有其他進程無法存取的讀取/寫入存取權。 使用 GlobalAlloc 搭配 GMEM_DDESHARE 配置的記憶體實際上不會與 16 位 Windows 中共用。 這個值沒有作用,而且僅適用於相容性。 需要共用記憶體以供其他用途的應用程式必須使用檔案對應物件。 多個進程可以對應相同檔案對應物件的檢視,以提供具名共享記憶體。 如需詳細資訊,請參閱 檔案對應。
記憶體配置只受限於可用的物理記憶體,包括磁碟上分頁檔案中的記憶體。 當您配置固定記憶體時,GlobalAlloc 和 LocalAlloc 傳回呼叫進程可以立即用來存取記憶體的指標。 當您配置可移動的記憶體時,傳回值是句柄。 若要取得可移動記憶體物件的指標,請使用 GlobalLock 和 LocalLock 函式。
配置之內存的實際大小可以大於要求的大小。 若要判斷配置的實際位元組數目,請使用 GlobalSize 或 LocalSize 函式。 如果配置的數量大於所要求的數量,則進程可以使用整個金額。
GlobalReAlloc 和 LocalReAlloc 函式會變更 globalAlloc和 LocalAlloc所配置的記憶體物件大小或屬性。 大小可能會增加或減少。
GlobalFree 和 LocalFree 函式會釋放由 globalAlloc、localAlloc LocalAlloc、GlobalReAlloc或 LocalReAlloc所配置的記憶體。 若要捨棄指定的記憶體物件而不使句柄失效,請使用 GlobalDiscard 或 LocalDiscard 函式。 稍後 GlobalReAlloc 或 LocalReAlloc,即可使用此句柄,以配置與相同句柄相關聯的新記憶體區塊。
若要傳回指定記憶體物件的相關信息,請使用 GlobalFlags 或 LocalFlags 函式。 此資訊包含對象的鎖定計數,並指出對像是可捨棄還是已經捨棄。 若要將句柄傳回與指定指標相關聯的記憶體物件,請使用 globalHandle 或 LocalHandle 函式。
相關主題