Globális és helyi függvények
A globális és a helyi függvények támogatottak a 16 bites kódból történő portoláshoz, vagy a forráskód 16 bites Windowssal való kompatibilitásának fenntartásához. A 32 bites Windowstól kezdve a globális és a helyi függvények burkolófüggvényekként vannak implementálva, amelyek meghívják a megfelelő halomfüggvényeket, a folyamat alapértelmezett halompontjához tartozó leíró használatával. Ezért a globális és a helyi függvények nagyobb többletterheléssel rendelkeznek, mint más memóriakezelési függvények.
A halomfüggvények több funkciót és vezérlést biztosítanak, mint a globális és a helyi függvények. Az új alkalmazásoknak a halomfüggvényeket kell használniuk, kivéve, ha a dokumentáció kifejezetten azt állítja, hogy globális vagy helyi függvényt kell használni. Egyes Windows-függvények például olyan memóriát foglalnak le, amelyet LocalFreekell felszabadítani, és a globális függvényeket továbbra is a Dinamikus adatcsere (DDE), a vágólapfüggvények és az OLE adatobjektumok használják. A globális és a helyi függvények teljes listáját a Memóriakezelési függvényektáblázatában találja.
A Windows memóriakezelése nem biztosít külön helyi és globális halomelemet, ahogyan a 16 bites Windows teszi. Ennek eredményeképpen a globális és a helyi függvénycsaládok egyenértékűek, és a választás közöttük személyes preferenciák kérdése. Vegye figyelembe, hogy a 16 bites szegmentált memóriamodellről a 32 bites virtuális memóriamodellre való váltás szükségtelenné vagy értelmetlenné tette a kapcsolódó globális és helyi függvények némelyikét és lehetőségeit. Például már nincsenek közeli és távoli mutatók, mert mind a helyi, mind a globális foglalások 32 bites virtuális címeket adnak vissza.
A GlobalAlloc és LocalAlloc által lefoglalt memóriaobjektumok privát, lekötött, olvasási/írási hozzáféréssel rendelkező lapok, amelyekhez más folyamatok nem férnek hozzá. A GlobalAlloc és GMEM_DDESHARE használatával lefoglalt memória valójában nem globálisan van megosztva, mint a 16 bites Windowsban. Ennek az értéknek nincs hatása, és csak kompatibilitási célokra érhető el. A más célra megosztott memóriát igénylő alkalmazásoknak fájlleképezési objektumokat kell használniuk. Több folyamat is megfeleltetheti ugyanannak a fájlleképezési objektumnak a nézetét, hogy elnevezett megosztott memóriát biztosítson. További információ: Fájlleképezés.
A memóriafoglalásokat csak a rendelkezésre álló fizikai memória korlátozza, beleértve a lemez lapozófájljában lévő tárhelyet is. Rögzített memória lefoglalásakor GlobalAlloc és LocalAlloc egy mutatót ad vissza, amelyet a hívási folyamat azonnal felhasználhat a memória eléréséhez. Az áthelyezhető memória lefoglalásakor a visszatérési érték egy fogópont. Ha egy mozgatható memóriaobjektumra szeretne mutatót kapni, használja a GlobalLock és LocalLock függvényeket.
A lefoglalt memória tényleges mérete nagyobb lehet, mint a kért méret. A lefoglalt bájtok tényleges számának meghatározásához használja a GlobalSize vagy LocalSize függvényt. Ha a lefoglalt összeg nagyobb, mint a kért összeg, a folyamat a teljes összeget használhatja.
A GlobalReAlloc és LocalReAlloc függvény megváltoztatja a GlobalAlloc és LocalAllocáltal lefoglalt memóriaobjektum méretét vagy attribútumait. A méret növekedhet vagy csökkenhet.
A GlobalFree és LocalFree függvények felszabadítják GlobalAlloc, LocalAlloc, GlobalReAllocvagy LocalReAllocáltal lefoglalt memóriát. Ha a megadott memóriaobjektumot a leíró érvénytelenítése nélkül szeretné elvetni, használja a GlobalDiscard vagy LocalDiscard függvényt. A GlobalReAlloc vagy LocalReAlloc később is használhatja a leírót egy új memóriablokk lefoglalásához, amely ugyanahhoz a fogóponthoz van társítva.
Egy megadott memóriaobjektum adatainak visszaadásához használja a GlobalFlags vagy LocalFlags függvényt. Az információk tartalmazzák az objektum zárolási számát, és jelzi, hogy az objektum elvethető-e, vagy már elvették. Ha vissza szeretne adni egy leírót a megadott mutatóhoz társított memóriaobjektumhoz, használja a GlobalHandle vagy LocalHandle függvényt.
Kapcsolódó témakörök