Programozás Windows NT
Jellemzők tervezték, hogy a virtuális memória, ami már úgy fenti, általánosan használt használata a memória blokkok viszonylag nagy méretű (több mint egy oldal). Azonban az alkalmazás csak néhány tucat bájt gyakran például, hogy hozzon létre egy dinamikus struktúrák vagy letölthető alkalmazás-erőforrások a memóriába. Nyilvánvaló, hogy működik külön oldalt, akkor aligha lesz képes könnyen és hatékonyan dolgozni memóriablokkokkal kis kötetet.
Ezért más funkciókat is biztosított a Microsoft Windows NT programozási felület, a tanulmány, amely most viszont. Mindezek a jellemzők eredményezi, hogy az imént tárgyalt funkciók működnek a virtuális memória.
Medencék memória a Microsoft Windows NT
Mint mondtuk, a Microsoft Windows 3.1-es verziója alkalmazás is rendelni a memória a két terület vagy két medencével - egy globális medence, ami elérhető az összes alkalmazást, és a helyben előállított minden alkalmazáshoz.
Ebben az esetben a 2 MB memória van fenntartva normál medence, és közvetlenül utána az alkalmazás betöltése 10 kilobájt memória használat közben létrejönnek.
Másodszor, a paramétereket a szabványos medence megadható a modul fájl (ami nem kötelező). Például így:
Lehetőségek a memória medencék
Így a rendelkezésre álló Microsoft Windows NT alkalmazásnak van egy szabványos medence és egy tetszőleges számú dinamikus memória medencék.
Ennek első parmetra összes funkció célja, hogy megkapjuk a standard memóriát vagy a dinamikus medence, pool azonosító átvitele.
Előállítása a standard pool azonosítót
Azonosító szabvány medence kap nagyon egyszerű. Ez az azonosító által visszaadott GetProcessHeap XE „GetProcessHeap”. nincsenek paraméterei:
Olyan dinamikus medence
Ha szüksége van egy dinamikus medencét, akkor hozza létre a HeapCreate XE funkciók „HeapCreate”:
dwMaximumSize dwInitialSize paramétereket, és meghatározza, illetve az összeg a lefoglalt medence memória és memória mérete szereztünk.
Keresztül flOptions paraméter akkor át null értéket, és az értéke HEAP_NO_SERIALIZE XE „HEAP_NO_SERIALIZE” és HEAP_GENERATE_EXCEPTIONS XE „HEAP_GENERATE_EXCEPTIONS”.
Paraméter HEAP_NO_SERIALIZE XE „HEAP_NO_SERIALIZE” köze multitasking, ami lesz szó egy külön fejezetben ezt a könyvet. Ha ez a paraméter nincs megadva, párhuzamosan futó feladatok a folyamat nem képes egyszerre férhetnek hozzá egy ilyen medence. Használhatja a zászló HEAP_NO_SERIALIZE a teljesítmény javítása érdekében, amikor létrehozta a medence csak egy folyamat feladat.
Amikor memóriafoglalási a medence hiba helyzetek adódhatnak. Ha a zászló nincs megadva HEAP_GENERATE_EXCEPTIONS XE „HEAP_GENERATE_EXCEPTIONS”. sootvtetvuyuschy hiba függvény visszatérési értéke NULL. Ellenkező esetben a bejelentést fog dobni egy kivételt. HEAP_GENERATE_EXCEPTIONS zászló hasznos olyan esetekben, amikor az alkalmazás biztosítja a kivételkezelés, amely lehetővé teszi a hibák kijavítására.
Siker esetén a függvény HeapCreate XE „HeapCreate” visszaadja az ID a létrehozott dinamikus memória áll rendelkezésre. Hiba esetén NULL vissza (vagy van egy kivétel, ha a megadott HEAP_GENERATE_EXCEPTIONS zászló).
Eltávolítása a dinamikus medence
Ha törölni dinamikus memória pool létrehozott függvényt HeapCreate XE „HeapCreate”. akkor használja a HeapDestroy XE „HeapDestroy”:
Ezen a szolgáltatáson keresztül, az egyetlen paraméter elküldött azonosító kipufogó dinamikus medence. Fontos tudni, hogy nem kell törölni az alapértelmezett medence, átadva a funkciót kapott érték a függvény GetProcessHeap XE „GetProcessHeap”.
Funkció HeapDestroy XE „HeapDestroy” hajt végre feltétlen eltávolítása a tárhely akkor is, ha ő nyert memóriablokkokkal idején eltávolítása a medence, akkor nem kerültek vissza a rendszerbe.
Előállítása A memória blokk a medence
A memória egy szabványos vagy dinamikus alkalmazás pool kell használni a funkciót HeapAlloc XE „HeapAlloc”. prototípusát, amely már az alábbiak:
Ami a paraméter hHeap, akkor neki, akkor sem strandartnogo memória pool azonosítót kapott a funkció GetProcessHeap XE „GetProcessHeap”. vagy azonosítója dinamikus medence, az alkalmazás hozza létre a funkció használata HeapCreate XE „HeapCreate”.
DwBytes paraméter megadja a memória mennyisége bájtokban a kívánt alkalmazást.
DwFlags paraméter kombinációja lehet a következő értékeket:
Memóriát nullákkal töltjük fel
Méretének változtatása a tároló egység
A funkció HeapReAlloc XE „HeapReAlloc” alkalmazás megváltoztathatja a méretét a memória blokk kiosztott korábbi funkció HeapAlloc XE „HeapAlloc”. csökkentheti vagy növelheti azt. HeapReAlloc függvény prototípusa a következő:
Meghatározása a méret a tároló egység
A hiba esetén, a függvény értéke 0xFFFFFFFF.
Ha a memória egység használ egyetlen folyamat feladat, akkor átmennek a dwFlags paraméter értékét HEAP_NO_SERIALIZE XE „HEAP_NO_SERIALIZE”.
felszabadítása
Lefoglalt memória használatával HeapAlloc XE funkciók „HeapAlloc”. Meg kell szabadítani, amint azt már nincs szükség. Ezt meg kell tenni az eszköz használatával HeapFree XE „HeapFree”:
Ha a memória egység használ egyetlen folyamat feladat, akkor átmennek a dwFlags paraméter értékét HEAP_NO_SERIALIZE XE „HEAP_NO_SERIALIZE”.
Ha a memória mérete blokk kiosztott működni HeapAlloc XE „HeapAlloc”. Ez volt a megváltozott funkció HeapReAlloc XE „HeapReAlloc”. a kiadás, mint a memória egy akkor még mindig a HeapFree XE „HeapFree”.
Funkciók használata malloc XE „malloc” és a szabad XE „szabad”
A könyvtárban a Microsoft Visual C ++ rendelkezik szabványos funkciók célja, hogy automatikusan megkapja, és engedje a memória, mint a malloc XE „malloc” és a szabad XE „szabad”.
Van egy jó hírünk az Ön számára - a környezetben a Microsoft Windows NT, akkor használja ezeket a funkciókat ugyanolyan hatékonysággal, mint funkcióval rendelkezik totó - HeapAlloc XE „HeapAlloc”. HeapFree XE "HeapFree" és így tovább. Azonban ezek a funkciók csak a memória normál medence.
Az egyik előnye a funkciók malloc XE „malloc” és a szabad XE „szabad” az a lehetőség, használatuk más platformokon nem a Microsoft Windows NT.
A régi memória funkció
A 32-bites alkalmazások, a Microsoft Windows NT, élvezheti számos operációs rendszer memória menedzsment funkciók a Microsoft Windows 3.1-es verziója, amely maradt az új operációs rendszer kompatibilitását. Megvizsgáltuk részletesen funkciók a „Memory Management”, 13. kötet „rendszer programozó Library”.
Emlékezzünk, hogy a 16 bites programozási felület Microsoft Windows 3.1-es verziója, van két funkció (globális és lokális), amelynek célja, hogy működjön együtt a globális és lokális memória áll rendelkezésre. Úgy működik, mint a GlobalAlloc XE "GlobalAlloc". LocalAlloc XE "LocalAlloc". GlobalFree XE "GlobalFree". LocalFree XE "LocalFree" és így tovább. A 32 bites Microsoft Windows NT alkalmazásokat, akkor a globális és lokális funkciók, és az eredmény az lesz pontosan ugyanaz. Ennek az az oka abban a tényben rejlik, hogy ezek a funkciók funkciók a szoftver Microsoft Windows NT felület, amelynek célja, hogy működjön együtt a standard memória pool: HeapAlloc XE „HeapAlloc”. HeapReAlloc XE "HeapReAlloc". HeapFree XE "HeapFree" és így tovább.
Itt van egy lista a régi programozási interfész funkciók, a Microsoft Windows NT alkalmazások érhetők el:
Meghatározása globális azonosítót (helyi) memória blokk
Felhívjuk a figyelmet arra, hogy a környezetben a Microsoft Windows 3.1-es verziója, akkor kaphat egy rögzített (fix), lebegő (mozgatható) és annak elhagyásakor (eldobható) memóriát.
Ami a cserélhető memóriakártya, akkor lehet használni, hogy tárolja az adatokat, hogy könnyen kinyerhető, például olvasni őket az alkalmazás források.