Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami
Linia 1: | Linia 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Zadanie 1 ''' Przerób przykłady z wykładu. | '''Zadanie 1 ''' Przerób przykłady z wykładu. | ||
Linia 11: | Linia 6: | ||
puli powina być podawana w konstruktorze. | puli powina być podawana w konstruktorze. | ||
− | <nowiki> template<typename T> linked_pool { | + | <nowiki>template<typename T> linked_pool { |
linked_pool(size_t n); | linked_pool(size_t n); | ||
Linia 27: | Linia 22: | ||
powinien zostać zwrócony wskaźnik zerowy. | powinien zostać zwrócony wskaźnik zerowy. | ||
− | '''Zadanie 3 ''' W oparciu o <code><nowiki> linked_pool</nowiki></code> napisz własne | + | '''Zadanie 3 ''' W oparciu o <code><nowiki>linked_pool</nowiki></code> napisz własne |
− | operatory <code><nowiki> new</nowiki></code>i <code><nowiki> delete</nowiki></code>. Napisz klasę która, będzie | + | operatory <code><nowiki>new</nowiki></code> i <code><nowiki>delete</nowiki></code>. Napisz klasę która, będzie |
implementowała te operatory i która będzie można dziedziczyć. | implementowała te operatory i która będzie można dziedziczyć. | ||
− | '''Wskazówka ''' Zobacz implementację zliczanie elementów w wykładzie | + | '''Wskazówka ''' Zobacz implementację zliczanie elementów w wykładzie 3. |
'''Zadanie 4 ''' Przerób nieznacznie alokator podany na wykładzie, tak | '''Zadanie 4 ''' Przerób nieznacznie alokator podany na wykładzie, tak | ||
Linia 38: | Linia 33: | ||
kontenerów? | kontenerów? | ||
− | '''Zadanie 5 ''' W oparciu o <code><nowiki> linked_pool</nowiki></code> napisz własny alokator pamięci. | + | '''Zadanie 5 ''' W oparciu o <code><nowiki>linked_pool</nowiki></code> napisz własny alokator pamięci. |
Do jakich pojemników będzie można go stosować?. | Do jakich pojemników będzie można go stosować?. |
Wersja z 09:34, 3 wrz 2006
Zadanie 1 Przerób przykłady z wykładu.
Zadanie 2 Napisz własną implementację zasobnika pamięci (memory pool). Zasobnik powinien być szablonem przyjmującym jako parametr typ obiektów dla których będzie przydzialał pamięc. Wielkość puli powina być podawana w konstruktorze.
template<typename T> linked_pool { linked_pool(size_t n); void *allocate() throw(); /*przydziela pamięc na jeden obiket T*/ void deallocate(void p) throw (); release()throw (); linked_pool(); }
Jeśli zarządamy za dużo pamięci, to powinien zostać zwrócony wskaźnik zerowy.
Zadanie 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 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ć?.