Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Ć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ć?.