Funkcje globalne i lokalne
Funkcje globalne i lokalne są obsługiwane w przypadku przenoszenia z 16-bitowego kodu lub zapewnienia zgodności kodu źródłowego z 16-bitowym systemem Windows. Począwszy od 32-bitowego systemu Windows, funkcje globalne i lokalne są implementowane jako funkcje otoki, które nazywają odpowiednie funkcje stert przy użyciu uchwytu do domyślnego sterta procesu. W związku z tym funkcje globalne i lokalne mają większe obciążenie niż inne funkcje zarządzania pamięcią.
Funkcje stert zapewniają więcej funkcji i kontroli niż funkcje globalne i lokalne. Nowe aplikacje powinny używać funkcji stert, chyba że należy użyć dokumentacji dotyczącej funkcji globalnej lub lokalnej. Na przykład niektóre funkcje systemu Windows przydzielają pamięć, która musi zostać zwolniona z LocalFree, a funkcje globalne są nadal używane z funkcją Dynamic Data Exchange (DDE), funkcjami schowka i obiektami danych OLE. Aby uzyskać pełną listę funkcji globalnych i lokalnych, zobacz tabelę w temacie funkcje zarządzania pamięcią .
Zarządzanie pamięcią systemu Windows nie zapewnia oddzielnego lokalnego sterta i globalnego sterta, jak 16-bitowy system Windows. W rezultacie globalne i lokalne rodziny funkcji są równoważne i wybór między nimi jest kwestią osobistych preferencji. Należy pamiętać, że zmiana z 16-bitowego modelu pamięci segmentowanej na 32-bitową pamięć wirtualną sprawiła, że niektóre powiązane funkcje globalne i lokalne oraz ich opcje są niepotrzebne lub bezsensowne. Na przykład nie ma już wskaźników blisko i daleko, ponieważ zarówno lokalne, jak i globalne alokacje zwracają 32-bitowe adresy wirtualne.
Obiekty pamięci przydzielone przez globalalloc i LocalAlloc znajdują się na prywatnych, zatwierdzonych stronach z dostępem do odczytu/zapisu, do których nie można uzyskać dostępu przez inne procesy. Pamięć przydzielona przy użyciu GlobalAlloc z GMEM_DDESHARE nie jest faktycznie udostępniana globalnie, ponieważ znajduje się w 16-bitowym systemie Windows. Ta wartość nie ma efektu i jest dostępna tylko w celu zachowania zgodności. Aplikacje wymagające pamięci udostępnionej do innych celów muszą używać obiektów mapowania plików. Wiele procesów może mapować widok tego samego obiektu mapowania plików w celu zapewnienia nazwanej pamięci udostępnionej. Aby uzyskać więcej informacji, zobacz mapowanie plików.
Alokacje pamięci są ograniczone tylko przez dostępną pamięć fizyczną, w tym magazyn w pliku stronicowania na dysku. Po przydzieleniu pamięci stałej GlobalAlloc i LocalAlloc zwracają wskaźnik, którego proces wywołujący może natychmiast użyć w celu uzyskania dostępu do pamięci. Po przydzieleniu pamięci przenoszonej wartość zwracana jest dojściem. Aby uzyskać wskaźnik do obiektu pamięci wymiennej, użyj funkcji GlobalLock i LocalLock.
Rzeczywisty rozmiar przydzielonej pamięci może być większy niż żądany rozmiar. Aby określić rzeczywistą liczbę przydzielonych bajtów, użyj funkcji GlobalSize lub LocalSize. Jeśli przydzielona kwota jest większa niż żądana kwota, proces może użyć całej kwoty.
Funkcje GlobalReAlloc i LocalReAlloc zmieniają rozmiar lub atrybuty obiektu pamięci przydzielonego przez globalalloc i LocalAlloc. Rozmiar może wzrosnąć lub zmniejszyć.
GlobalFree i LocalFree funkcje zwalniają pamięć przydzieloną przez GlobalAlloc, LocalAlloc, GlobalReAlloclub LocalReloc. Aby odrzucić określony obiekt pamięci bez unieważnienia uchwytu, użyj funkcji GlobalDiscard lub LocalDiscard. Dojście może być później używane przez GlobalReAlloc lub LocalReAlloc w celu przydzielenia nowego bloku pamięci skojarzonego z tym samym dojściem.
Aby zwrócić informacje o określonym obiekcie pamięci, użyj funkcjiglobalFlagslub LocalFlags. Informacje zawierają liczbę blokad obiektu i wskazują, czy obiekt można odrzucić, czy został już odrzucony. Aby zwrócić uchwyt do obiektu pamięci skojarzonego z określonym wskaźnikiem, użyj funkcji GlobalHandle lub LocalHandle.
Tematy pokrewne