Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 7: | Linia 7: | ||
Napisz własną implementację zasobnika pamięci | Napisz własną implementację zasobnika pamięci | ||
(memory pool). Zasobnik powinien być szablonem przyjmującym jako | (memory pool). Zasobnik powinien być szablonem przyjmującym jako | ||
parametr typ obiektów dla których będzie | parametr typ obiektów dla których będzie przydzielał pamięć. Wielkość | ||
puli | puli powinna 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); | ||
void *allocate() throw(); /*przydziela | void *allocate() throw(); /*przydziela pamięć na jeden obiekt T*/ | ||
void deallocate(void p) throw (); | void deallocate(void p) throw (); | ||
release()throw (); | release()throw (); | ||
linked_pool(); | ~linked_pool(); | ||
}</nowiki> | }</nowiki> | ||
| Linia 37: | Linia 37: | ||
Przerób nieznacznie alokator podany na wykładzie, tak | Przerób nieznacznie alokator podany na wykładzie, tak | ||
aby jego funkcje wypisywały | 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 | pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla róznych | ||
kontenerów? | kontenerów? | ||
Wersja z 14:55, 12 wrz 2006
Ćwiczenie 1
Przerób przykłady z wykładu.
Ćwiczenie 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 przydzielał pamięć. Wielkość puli powinna być podawana w konstruktorze.
template<typename T> linked_pool {
linked_pool(size_t n);
void *allocate() throw(); /*przydziela pamięć na jeden obiekt 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.
Ć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ć?.