Vizuális programozás és az MFC - a memória kezelése

Felfedezése előtt a memória kezelése a Windows, akkor először meg kell érteni, mi a folyamat (process). ¥ A program egy EXE fájlt lehet futtatni a Windows sokféleképpen. A program elindítása után folyamattá válik. A program saját memóriával rendelkezik, fájlkezelőkhöz, és más rendszer erőforrásait. Ha két egymást követő fut ugyanaz a program, van két különböző folyamatokat.

memória eszközt

  • A képen a program futtatható fájl;
  • Az összes nem rendszer DLL, terhelt a programot (beleértve az MFC DLL-modulok)
  • Globális adatok szoftver (kapható írni és olvasni, és csak olvasható);
  • programvermet;
  • dinamikusan memóriát, így a Windows kupac, és a C futásidejű könyvtár;
  • fájlok vetített a memóriában;
  • memória blokkok által megosztott több folyamat;
  • memória helyi a végrehajtó szál;
  • specifikus rendszer memória blokkok, beleértve a virtuális memória táblázatban;
  • A kernel és a Windows DLL-alkatrészek.

Ahogy bajusz troena virtuális memória

Ha az olvasás és a felvételt az oldal (annak érdekében, hogy a maximális teljesítmény) határozza meg a Windows virtuális memória menedzser. Ha a folyamat nem használja az oldalt egy bizonyos ideig, és ez a memóriára van szükség egy másik folyamat, ez az oldal rakodni a memóriából, és az oldal betöltésekor helyett az új eljárás.

Minden folyamat megosztani egy nagy rendszer-szintű lapozófájl (swap file), amely kerülnek (ha szükséges), mindenféle adat „írni és olvasni”, és valamilyen adat „csak olvasható”. (Windows NT támogatja az egyidejű üzemeltetése több Lapozófájlok.) A Windows határozza meg a lapozófájl méretét, attól függően, hogy a RAM mérete és lemezterület, de olyan módon, hogy finomítsa a méretétől és a fájl helyét.

VirtualAlloc funkció: át, és lefoglalt memória

Ha a programot kell dinamikusan a memóriát, akkor előbb vagy utóbb meg kell hívni a funkció VirtualAlloc. Okozhat, hogy nem egy programozó, és a Windows funkciók vagy C futásidejű könyvtár memóriát a kupac. Ismerve az VirtualAlloc jobban megértsék a funkciók, amelyek vonatkoznak rá.

tanácsok funkció Lenia memória

Egy rakás szél OWS és a családi funkciók GlobalAlloc

Egy rakás (halom) Ohno egy medence memória bármely eljárás. Amikor egy programnak szüksége a memória egy onavyzyvaet funkció memóriát a kupac, és engedje szabadon a korábban kiosztott memória, ¥ funkció az első pár. Alignment többszöröse 4 KB ebben az esetben nem történik; A kupac vezetője használja a teret a korábban kiosztott lapok vagy kifejezés VirtualAlloc. hogy további oldalakat. Az egyik a két halom, amellyel a program működik, Ohno a Windows csapat. Elkülönítsük memória funkció HeapAlloc. és a kiadás ¥ HeapFree funkciót. HeapAlloc különösen hasznos az izolálása „nagy” memória blokkok.

Bolyhos C futásidejű könyvtár, _heapmin és C ++ - üzemeltetők új és törlése

Azonban a Windows csokor (és HeapAlloc funkció) ¯ nem egy kupacban, ami működni fog a legtöbb alkalmazás. Van egy másik kupac kezeli azt ¥ C futásidejű könyvtár (C Runtime Library, CRT). Hozzáférés a CRT-halom megvalósított funkciók malloc és free közvetlen hívó C ++ new és delete. Ez a halom van optimalizálva izolálására kis méret blokkok.

Természetesen malloc függvény meghívja VirtualAlloc, de ezzel nagyon ügyesen. Amikor először az úgynevezett fenntartja a régió mérete 1 Mb (a jövőben megjelenő Visual C ++, ezek az értékek változhatnak), és továbbít egy blokk memória, amelynek mérete többszöröse 64 KB (ha malloc okozott memóriát mérete 64K vagy kisebb, az egyik 64 Kbyte kiosztott blokk következő hívás a memóriát, amennyire csak lehetséges ebben a blokkban ;. egyébként a kupac manager okoz VirtualAlloc közvetíteni több memóriát Miután a régióban 1 Mb fogy, a malloc osztja másik terület mérete 2 MB, akkor a másik, de .. van méret 4 MB memória, és így áthalad az szükséges.

Ha a folyamat által lefoglalt egy csomó memóriát a CRT-kupac, majd megjelent a legtöbb ezt a memóriát, minden oldal át. Bár RAM ugyanakkor azt nem lehet az egész folyamat egy oldalra a lapozófájl, amelyek nem érhetők el más folyamatokat. Amikor felhívja a többi CRT-funkciók, _heapmin. A kupac manager visszaadja az összes szabad lapok sőt, mentes minden teljesen visszatért régiókban.

Látható a fájl memória és a megosztott memória

A fájl kijelző segítségével lehet létrehozni CreateFileMapping funkciót. Megnyitni egy létező kijelző egyedi neve az alkalmazás tudja használni OpenFileMapping funkciót. MapViewOfFile funkció megjeleníti a részét a fájlt a virtuális memória blokk.

A jellemzője memórialeképezésesek fájlok együttes alkalmazásuk a különböző alkalmazások, vagyis Ha két alkalmazás megnyitja a fájlt térképezést az azonos nevű, ők, sőt, létrehozott egy osztott memóriát blokk.

Feleslegesen ne használjon egy file, ha csak arra van szükség, hogy továbbítson egy pár byte alkalmazások között? A valóságban nincs szükség kifejezetten nyissanak és használjanak egy file megjelenítés a memóriában. Az alkalmazások közvetíteni különleges jelentéssel bírnak a leíró 0hFFFFFFFF CreateFileMapping funkció kijelző közvetlenül a rendszerbe lapozófájl. Ez valójában, létrehoz egy osztott memóriát blokk.

Multiplayer LKO tippeket dolgozik dinamikus memória

Az intenzívebb használat kupac, hogy nagyobb mértékben széttöredezett, és annál lassabban működik a program. Ha azt feltételezzük, hogy a program fog futni a folyamatos működés órákon vagy napokon, legyen óvatos. Sokkal jobb, hogy oda az összes szükséges memóriát, amikor a program elindul, és szabad, ha bezárja, de ez nem mindig lehetséges. Van megakadályozhatja CString osztály, amely folyamatosan osztja, és felszabadítja a memóriát az apró részletekben. Azonban MFC fejlesztők az utóbbi időben készült számos fejlesztést.

Ha a program főként kiválasztódik kis blokk, de néha megköveteli 6olshih blokkok (figyelembe őket egy ideig, eltér attól, amelyen tart kis blokk), akkor meg kell gondolni elosztására nagy tömbök funkció HeapAlloc. nem új. Ez némileg csökkenti a mértéke a töredezettség CRT-kupac. Nem szabad elfelejteni, időről időre vzyvat _heapmin. Ez nagy gondot kell fordítani érkezett, vagy hogy a blokk memória ¯ alkalmazás nem megy át egy komoly probléma, ha például, hatására HeapFree mutatótűjének kapott az új.

Ez a méret a verem lehet szükség szerint figyelembe kell venni. Mert most nincs határa 64 KB, a köteget lehet helyezni nagyméretű tárgyak, ami csökkenti annak szükségességét, hogy a memória kiosztás a kupac.

Kapcsolódó cikkek