Sdílet prostřednictvím


Globální a místní funkce

Globální a místní funkce jsou podporovány pro přenos z 16bitového kódu nebo pro zachování kompatibility zdrojového kódu s 16bitovým Windows. Od 32bitového systému Windows se globální a místní funkce implementují jako obálkové funkce, které volají odpovídající funkce haldy pomocí popisovače výchozí haldy procesu. Globální a místní funkce proto mají větší režii než jiné funkce správy paměti.

Funkce haldy poskytují více funkcí a řízení než globální a místní funkce. Nové aplikace by měly používat funkce haldy, pokud dokumentace výslovně nepojme, že by se měla použít globální nebo místní funkce. Některé funkce Systému Windows například přidělují paměť, která musí být uvolněna pomocí LocalFreea globální funkce se stále používají s funkcí DDE (Dynamic Data Exchange), funkce schránky a datovými objekty OLE. Úplný seznam globálních a místních funkcí najdete v tabulce Funkce správy paměti.

Správa paměti systému Windows neposkytuje samostatnou místní haldu a globální haldu, protože to dělá 16bitová verze Windows. V důsledku toho jsou globální a místní rodiny funkcí ekvivalentní a volba mezi nimi je otázkou osobní preference. Všimněte si, že změna z 16bitového segmentovaného modelu paměti na 32bitový model virtuální paměti provedla některé související globální a místní funkce a jejich možnosti zbytečné nebo nesmyslné. Například již nejsou téměř ani daleko ukazatele, protože místní i globální přidělení vrací 32bitové virtuální adresy.

Paměťové objekty přidělené GlobalAlloc a LocalAlloc jsou soukromé a potvrzené stránky s přístupem pro čtení a zápis, ke kterým nemají přístup jiné procesy. Paměť přidělená pomocí GlobalAlloc s GMEM_DDESHARE se ve skutečnosti nesdílí globálně, protože je v 16bitovém Systému Windows. Tato hodnota nemá žádný vliv a je k dispozici pouze z důvodu kompatibility. Aplikace vyžadující sdílenou paměť pro jiné účely musí používat objekty mapování souborů. Více procesů může mapovat zobrazení stejného objektu mapování souborů tak, aby poskytovalo pojmenovanou sdílenou paměť. Další informace naleznete v tématu Mapování souborů.

Přidělení paměti jsou omezena pouze dostupnou fyzickou pamětí, včetně úložiště ve stránkovacím souboru na disku. Když přidělíte pevnou paměť, GlobalAlloc a LocalAlloc vrátit ukazatel, který volající proces může okamžitě použít pro přístup k paměti. Když přidělíte přesunoutelnou paměť, návratová hodnota je popisovač. Pokud chcete získat ukazatel na objekt pohyblivé paměti, použijte funkce GlobalLock a LocalLock.

Skutečná velikost přidělené paměti může být větší než požadovaná velikost. K určení skutečného počtu přidělených bajtů použijte funkci GlobalSize nebo LocalSize. Pokud je přidělená částka větší než požadovaná částka, proces může použít celou částku.

Funkce GlobalReAlloc a LocalReAlloc mění velikost nebo atributy objektu paměti přiděleného GlobalAlloc a LocalAlloc. Velikost se může zvětšit nebo zmenšit.

GlobalFree a LocalFree uvolní paměť přidělenou GlobalAlloc, LocalAlloc, GlobalReAllocnebo LocalReAlloc. Pokud chcete zahodit zadaný objekt paměti bez zneplatnění popisovače, použijte funkci GlobalDiscard nebo LocalDiscard. Popisovač lze později použít GlobalReAlloc nebo LocalReAlloc k přidělení nového bloku paměti přidruženého ke stejnému popisovači.

Chcete-li vrátit informace o zadaném objektu paměti, použijte funkciGlobalFlags nebo LocalFlag s. Informace zahrnují počet zámků objektu a označují, jestli je objekt zahozený nebo již byl zahozen. Pokud chcete vrátit popisovač objektu paměti přidruženému k zadanému ukazateli, použijte funkci GlobalHandle nebo LocalHandle.

porovnání metod přidělování paměti