Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 5: | Linia 5: | ||
{{cwiczenie|2|| | {{cwiczenie|2|| | ||
Napisz własną implementację | 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 <tt>std::bad_alloc</tt>. Jeśli | |||
wyczerpie się pamięć w puli, żądanie przydziału powinno rzucić | |||
<tt>std::bad_alloc</tt>: | |||
linked_pool(size_t n); | |||
void *allocate() throw(); /*przydziela | 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*/ | |||
| linked_pool() throw() ; | ||
} | |||
} | |||
}} | }} | ||
{{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 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ć.
Ć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ć?.