3.18. Zarządzanie pamięcią.txt

(120 KB) Pobierz
Rozdzia� 18.
Zarz�dzanie pami�ci�


W tym rozdziale:    Dost�pne rodzaje pami�ci   Zarz�dzanie pami�ci� przez system operacyjny

Podobie�stwa i r�nice w pami�ci pomi�dzy Windows 98 a Windows NT
Dynamiczne alokowanie prywatnej pami�ci
Dzielenie pami�ci pomi�dzy procesami


Pami�� to waluta oprogramowania. Bez odpowiedniej pami�ci programy dzia�aj� wolno lub nie dzia�aj� wcale. Przy odpowiedniej ilo�ci pami�ci oprogramowanie dzia�a poprawnie i mo�e wykonywa� swoje zadania. Jednak wyznaczenie odpowiedniej ilo�ci pami�ci dla programu zale�y od tego, w jaki spos�b program wykorzystuje dost�pn� pami��. Cho� cena pami�ci wci�� spada, jednak pami�� nie jest dost�pna za darmo. Programi�ci musz� wi�c realistycznie okre�la� wymagania pami�ciowe dla swoich aplikacji.
W tym rozdziale zajmiemy si� wszystkimi rodzajami pami�ci dost�pnymi dla program�w MFC/Win32 dzia�aj�cych w Windows 98. Podobnie jak istnieje wiele walut - na przyk�ad dolary, marki czy franki - istnieje tak�e wiele rodzaj�w pami�ci. Opr�cz skatalogowania rodzaj�w pami�ci w tym rozdziale powiemy tak�e, kt�re rodzaje i dlaczego s� u�yteczne w typowym programie MFC. Jedno jest jasne: nawet prosty program wymaga r�nych rodzaj�w pami�ci. Rodzaje pami�ci dost�pne dla programu MFC/Win32 zebrano w tabeli 18.1.
Zarz�dzanie pami�ci� systemow�
Najwa�niejszym chyba ulepszeniem zastosowanym w Windows 95 w stosunku do wcze�niejszych wersji Windows jest wprowadzenie p�askiego, 32-bitowego sposobu adresowania. Programy Win 16, dzia�aj�ce w Windows 3.x musia�y by� dzielone na segmenty, czyli bloki pami�ci o rozmiarze od 16 bajt�w do 64K. Buduj�c aplikacje Win 16 programi�ci musieli zmaga� si� z odpowiednim u�yciem s��w kluczowych kompilatora, takich jak _near i _far w celu okre�lenia odpowiedniej metody adresowania.
Tabela 18.1. Rodzaje pami�ci dost�pnej dla program�w MFC/Win32 dzia�aj�cych w Windows 98
Kategoria       
Typ
Opis
        (kateg.)Kompilator     
 Automatyczna-Lokalne zmienne lub lokalne obiekty. Tworzone na stosie podczas wej�cia do funkcji i zwalniane przy wyj�ciu z niej.

Statyczna-Globalne zmienne lub globalne obiekty zdefiniowane poza zakresem jakiejkolwiek funkcji. Dane statyczne zawieraj�ce tak�e sta�e �a�cuchowe. Zmienne i obiekty zdefiniowane z u�yciem s�owa kluczowego static. Czas �ycia tych danych obejmuje czas rezydowania pliku wykonywalnego w pami�ci.

Klasa-Dane sk�adowych klasy odnosz�ce si� do zmiennych i obiekt�w zaalokowanych w obiekcie jako dane sk�adowe klasy. Dane te �yj� tak d�ugo, jak d�ugo istnieje zawieraj�cy je obiekt. Dane w obiektach lokalnych (tworzonych na stosie) s� alokowane przy wej�ciu do funkcji i zwalniane przy wyj�ciu. Dane w obiektach globalnych (statycznych) istniej� dop�ty, dop�ki plik wykonywalny znajduje si� w pami�ci.

Alokowana dynamicznie-Pami�� alokowana wywo�aniem malloc () lub operatorem new. W celu poprawnego zarz�dzania pami�ci� aplikacje powinny wywo�ywa� funkcj� f ree () lub operator delete dla wszystkich zaalokowanych obszar�w pami�ci.


             (kateg.)Win16
Sterta globalna-Pami�� zaalokowana wywo�aniem GlobalAlloc (). W Winl� odnosi si� to do zaalokowanego segmentu. W Win32 takie obiekty s� alokowane na stercie procesu Win32 (tak jak pami�� alokowana wywo�aniem LocalAlloc ()).

Sterta lokalna-Pami�� zaalokowana wywo�aniem LocalAlloc (). W Winl� odnosi si� to do zaalokowanego podsegmentu. W Win32 takie obiekty s� alokowane na stercie procesu (tak jak pami�� alokowana wywo�aniem GlobalAlloc ()).

Zasoby-Dane tylko do odczytu zdefiniowane w plikach zasob�w (.RC). Do predefiniowanych typ�w nale�� menu, okna dialogowe oraz tablice �a�cuch�w. Program mo�e tak�e tworzy� w�asne rodzaje zasob�w, korzystaj�c z technik, kt�re opiszemy w dalszej cz�ci rozdzia�u.

Atomy-�a�cuchy przechowywane w tablicach w pami�ci i dost�pne poprzez unikalne identyfikatory. Zar�wno w API Winl�, jak i w Win32 wyst�puj � funkcje AddAtom (). FindAtom () oraz DeleteAtom (). Wewn�trznie Windows u�ywa atom�w dla zarejestrowanych format�w schowka oraz zarejestrowanych komunikat�w. Aplikacje korzystaj� z globalnej tabeli atom�w przy obs�udze dynamicznej wymiany danych (DDE, Dynamie Data Echange). Do globalnych funkcji operuj�cych atomami nale��GlobalAddAtomf) oraz GlobalFIndAtom().

Dodatkowe bajty okna-Windows alokuje dodatkowe dane dla ka�dego tworzonego okna. Dodatkowe bajty okna to dodatkowa pami�� nale��ca do okna, poza danymi umieszczonymi w nim przez system. Dost�p do tych danych odbywa si� przez u�ycie r�norodnych funkcji Winl6/Win32 API, kt�re opiszemy w tym rozdziale.

Dodatkowe bajty klasy-Windows alokuje dodatkowe dane dla ka�dej definiowanej klasy okna (nie nale�y jej myli� z klas� okna MFC). Dodatkowe bajty klasy okna to dodatkowa pami�� nale��ca do klasy okna, poza danymi umieszczonymi w niej przez system. Dost�p do tych danych odbywa si� przez u�ycie r�norodnych funkcji Winl6/Win32 API, kt�re opiszemy w tym rozdziale.

W�a�ciwo�ci-Atrybuty dynamicznie wi�zane z oknami. Na przyk�ad, mo�esz stworzy� atrybut COLOR i do��czy� mu indeks koloru. Dost�pne w wyniku funkcji Winl6/Win32 SetProp (), GetProp () oraz RemoveProp ().

(kateg.)Win32	
Strony prywatne-Pami�� zaalokowana w stronach (4K w Windows 98, by� mo�e wi�cej w Windows NT) w wyniku wywo�ania funkcji VirtualAlloc (). Ta funkcja Win32 wywo�ana ze znacznikiem MEM_RESERVE s�u�y tak�e do rezerwowania zakresu adres�w.




Prywatna sterta - Pami�� zarezerwowana wywo�aniem HeapAlloc ().
Proces Win32 mo�e tworzy� kilka stert za pomoc� wywo�a� HeapCreate (). W celu uzyskania uchwytu domy�lnej sterty procesu wywo�aj funkcj� GetProcessHeap ().
Lokalny obszar-  Pami�� zaalokowana dla w�tku. Istniej� dwa rodzaje takich danych w�tku      obszar�w: dynamiczny obszar danych w�tku jest alokowany
wywo�aniem TlsAlloc (), za� obszar statyczny jest alokowany
przez kompilator.
Wsp�lne strony-  Pami�� zaalokowana wywo�aniem MapViewOf File (), kt�re mo�e tak�e tworzy� widok na plik odwzorowany w pami�ci, w zale�no�ci od podanego uchwytu pliku. B��dny uchwyt pliku (-1) powoduje utworzenie wsp�lnych stron, za� poprawny uchwyt pliku powoduje utworzenie pliku odwzorowanego w pami�ci.
Wsp�lne sekcje-  Statyczne (globalne) zmienne zadeklarowane z u�yciem s�owa kluczowego _declspec (thread) definiuj� wsp�ln� sekcj� w pliku wykonywalnym. Po za�adowaniu do pami�ci s� one wsp�lne dla proces�w w programach zar�wno Windows 98, jak i Windows NT.
Pliki odwzorowane w pami�ci-Wsp�lne strony po��czone z przestrzeni� adresow� procesu
	wywo�aniami MapViewOf File (). Zwr�� uwag� �e w ten
	sam spos�b API tworzy wsp�lne strony.
Obraz wykonywalny -Plik wykonywalny (.EXE) lub dynamicznie ��czona biblioteka     (.DII) w pami�ci.
Programi�ci pisz�cy dla Win32 API nie musz� si� ju� tym martwi�. Bardzo niewielu programist�w przechodz�cych z Wini6 API do programowania w Win32 t�skni do problem�w z segmentacj� i adresowaniem pami�ci.
W Windows 98 dzia�a wiele r�nych rodzaj�w program�w, w��cznie z programami MS-DOS, programami Win 16 oraz oczywi�cie programami Win32. Aby mie� pe�ny obraz, w jaki spos�b procesory Intela z rodziny x86 daj� sobie z tym rad�, musisz zrozumie� cztery tryby adresowania w 32-bitowych procesorach Intela. Do tryb�w tych nale��: tryb rzeczywisty, 16-bitowy tryb chroniony, 32-bitowy tryb stronicowany oraz 16-bitowy tryb wirtualny 8086. Poniewa� programy Win32 dzia�aj� w 32-bitowym trybie stronicowanym, skupimy si� w�a�nie na nim.
32-bitowy, stronicowany tryb adresowania Intela
Win32 API zosta�o zaprojektowane dla procesor�w mog�cych obs�u�y� dwie cechy pami�ci: adresowanie 32-bitowe oraz pami�� stronicowan�. W rodzinie procesor�w Intel x86 jedynie procesor Intel 80386 i nowsze spe�niaj� te wymagania. Wcze�niejsze procesory - w��cznie z 8088 oraz 80286 - nie spe�niaj� wymaga� adresowania pami�ci w Win32 i w zwi�zku z tym nie da si� na nich uruchomi� Windows 95/98.
P�niejsi przedstawiciele tej rodziny - do kt�rych nale�� mi�dzy innymi 80386, i486 oraz Pentium - spe�niaj� oba wymagania. Wszystkie te procesory obs�uguj� pojedynczy rozmiar strony: 4K. Jako takie, programy Win32 dzia�aj�ce w Windows 95/98 musz� dzia�a� w�a�nie przy takim rozmiarze strony.
Nie nale�y jednak zak�ada�, �e ka�da implementacja Win32 b�dzie mia�a strony po 4K. Na przyk�ad, procesory Digital Alpha, na kt�rych mo�e dzia�a� Windows NT, ma strony o rozmiarze 8K. Za� Win32 zosta�o zaprojektowane tak, by dzia�a�o poprawnie tak�e z innymi rozmiarami stron, w��cznie z 16K i nawet 32K. Je�li tworzysz oprogramowanie Win32 w jaki� spos�b zale�ne od stron o rozmiarach 4K, mo�esz napotka� k�opoty po uruchomieniu programu z procesorem wykorzystuj�cym strony o innych rozmiarach.
Opisywany schemat adresowania jest po prostu zaszyty na sta�e w procesory Intela. Poniewa� reprezentuje on sensowny schemat dla stronicowanej, wirtualnej pami�ci, takie samo podej�cie zastosowano w Windows NT - nawet w przypadku procesor�w innych ni� procesory Intela.
Trzy cz�ci adresu wirtualnego
32-bitowe stronicowane adresowanie Intela wi��e si� z podzia�em 32-bitowego adresu na trzy cz�ci. 32-bitowy adres posiada jedn� cz�� 12-bitow� i dwie cz�ci 10-bitowe. Aby pom�c Ci w ich zrozumieniu, jako pierwsz� opiszemy cz�� 12-bitow�.
Najni�sze 12 bit�w zostanie opisane jako pierwsze, gdy� s� naj�atwiejsze do zrozumienia. Okre�laj� one przesuni�cie (offset) w zakresie pojedynczej strony pami�ci. Jak ju� wspomniano, strona ma 4K, co odpowiada dok�adnie dwunastu bitom adresu (212 = 4K = 4096 bajt�w). Poszczeg�lne strony to niewiele wi�cej ni� tablice bajt�w o 4K pozycjach. Oczywi�cie, sam 12-bitowy adres do niczego nie wystarczy. Aby przechowa� u�yteczn� ilo�� danych, konieczne jest posiadanie wielu stron.
Do poszczeg�lnych stron mo�esz odwo�a� si�, korzystaj�c ze �rodkowych 10 bit�w w 32-bitowym adresie wirtualnym. Te dziesi�� bit�w jest u�ywane jako przesuni�cie (offset) wewn�trz specjalnej strony pami�ci nazywanej tablic� stron (ang. page table). Tablica stron zajmuje 4K pami�ci i mo�e od...
Zgłoś jeśli naruszono regulamin