Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Mirek (dyskusja | edycje)
Nie podano opisu zmian
Linia 5: Linia 5:
{{cwiczenie|2||
{{cwiczenie|2||


Napisz własną implementację zasobnika pamięci
Napisz własną implementację puli pamięci opartą
(memory pool).  Zasobnik powinien być szablonem przyjmującym jako
o listę.  Zasobnik powinien być szablonem przyjmującym jako parametr
parametr typ obiektów dla których będzie przydzielał pamięć. Wielkość
typ obiektów, dla których będzie przydzielał pamięć. Wielkość puli
puli powinna być podawana w konstruktorze.
powinna być podawana w konstruktorze. Jeśli zażądamy za dużo pamięci,
 
to powinien zostać rzucony wyjątek <tt>std::bad_alloc</tt>.  Jeśli
<nowiki>template<typename T> linked_pool {
wyczerpie się pamięć w puli, żądanie przydziału powinno rzucić
 
<tt>std::bad_alloc</tt>:
linked_pool(size_t n);
 
void *allocate() throw(); /*przydziela pamięć na jeden obiekt T*/
template<typename T> linked_pool {<br>
void deallocate(void p) throw ();
linked_pool(size_t n) throw(std::bad_alloc);
 
void *allocate() throw(std::bad_alloc); /*przydziela pamięc na jeden obiekt T*/
release()throw ();
void deallocate(void *p) throw ();<br>
 
release() throw ();       /*zwalnia całą pamięć z puli*/
&nbsp;~linked_pool();
&nbsp;linked_pool() throw() ;
 
}
}</nowiki>
 
Jeśli zarządamy za dużo pamięci, to
powinien zostać zwrócony wskaźnik zerowy.
}}
}}
{{cwiczenie|3||
{{cwiczenie|3||
Linia 46: Linia 42:
Do jakich pojemników będzie można go stosować?.
Do jakich pojemników będzie można go stosować?.
}}
}}
'''Zadanie 3 '''  W oparciu o {linked_pool} zaimplementuj klasę
z własnymi operatorami {new} i {delete}.  Zaimplementuj klasę
tak, aby można było z niej dziedziczyć i w ten sposób łatwo
implementować {new} i {delete} w dowolnej klasie.
'''Wskazówka '''  Zobacz implementację zliczanie elementów w wykładzie&nbsp;3.
'''Zadanie 4 '''  Przerób nieznacznie alokator podany na wykładzie, tak
aby jego funkcje wypisywały inforacje o tym co robią. Użyj go z różnymi typami
pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla róznych
kontenerów?
'''Zadanie 5 '''  W oparciu o {linked_pool} napisz własny alokator pamięci.
Do jakich pojemników będzie można go stosować?.

Wersja z 12:21, 25 wrz 2006

Ćwiczenie 1

Przerób przykłady z wykładu.

Ćwiczenie 2

Napisz własną implementację puli pamięci opartą o listę. Zasobnik powinien być szablonem przyjmującym jako parametr typ obiektów, dla których będzie przydzielał pamięć. Wielkość puli powinna być podawana w konstruktorze. Jeśli zażądamy za dużo pamięci, to powinien zostać rzucony wyjątek std::bad_alloc. Jeśli wyczerpie się pamięć w puli, żądanie przydziału powinno rzucić std::bad_alloc:

template<typename T> linked_pool {
linked_pool(size_t n) throw(std::bad_alloc); void *allocate() throw(std::bad_alloc); /*przydziela pamięc na jeden obiekt T*/ void deallocate(void *p) throw ();
release() throw (); /*zwalnia całą pamięć z puli*/  linked_pool() throw() ; }

Ćwiczenie 3

W oparciu o linked_pool napisz własne operatory new i delete. Napisz klasę która, będzie implementowała te operatory i która będzie można dziedziczyć.

Wskazówka

Ćwiczenie 4

Przerób nieznacznie alokator podany na wykładzie, tak aby jego funkcje wypisywały informacje o tym co robią. Użyj go z różnymi typami pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla róznych kontenerów?

Ćwiczenie 5

W oparciu o linked_pool napisz własny alokator pamięci. Do jakich pojemników będzie można go stosować?.




Zadanie 3 W oparciu o {linked_pool} zaimplementuj klasę z własnymi operatorami {new} i {delete}. Zaimplementuj klasę tak, aby można było z niej dziedziczyć i w ten sposób łatwo implementować {new} i {delete} w dowolnej klasie.

Wskazówka Zobacz implementację zliczanie elementów w wykładzie 3.

Zadanie 4 Przerób nieznacznie alokator podany na wykładzie, tak aby jego funkcje wypisywały inforacje o tym co robią. Użyj go z różnymi typami pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla róznych kontenerów?

Zadanie 5 W oparciu o {linked_pool} napisz własny alokator pamięci. Do jakich pojemników będzie można go stosować?.