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
Rogoda (dyskusja | edycje)
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 przydzialał pamięc. Wielkość
parametr typ obiektów dla których będzie przydzielał pamięć. Wielkość
puli powina być podawana w konstruktorze.
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 pamięc na jeden obiket T*/
void *allocate() throw(); /*przydziela pamięć na jeden obiekt T*/
void deallocate(void p) throw ();
void deallocate(void p) throw ();


release()throw ();
release()throw ();


&nbsp;linked_pool();
&nbsp;~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 inforacje o tym co robią. Użyj go z różnymi typami  
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ć.

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