Zaawansowane CPP/Ćwiczenia 14: Zarządzanie pamięcią: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Linia 1: Linia 1:
'''Zadanie 1 '''  Przerób przykłady z wykładu.
+
{{cwiczenie|1||
  
'''Zadanie 2 '''  Napisz własną implementację zasobnika pamięci
+
Przerób przykłady z wykładu.
 +
}}
 +
{{cwiczenie|2||
 +
 
 +
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 przydzialał pamięc. Wielkość
Linia 20: Linia 24:
 
Jeśli zarządamy za dużo pamięci, to
 
Jeśli zarządamy za dużo pamięci, to
 
powinien zostać zwrócony wskaźnik zerowy.  
 
powinien zostać zwrócony wskaźnik zerowy.  
 +
}}
 +
{{cwiczenie|3||
  
'''Zadanie 3 '''  W oparciu o <code><nowiki>linked_pool</nowiki></code> napisz własne
+
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ć.
 +
}}
 +
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">
 +
Zobacz implementację zliczanie elementów w wykładzie 3.
 +
</span><div class="mw-collapsible-content" style="display:none">
 +
{{cwiczenie|4||
  
'''Wskazówka '''  Zobacz implementację zliczanie elementów w wykładzie 3.
+
Przerób nieznacznie alokator podany na wykładzie, tak  
 
 
'''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  
 
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
 
pojemników. Co możesz powiedzieć o sposobie przydziału pamięci dla róznych
 
kontenerów?
 
kontenerów?
 +
}}
 +
{{cwiczenie|5||
  
'''Zadanie 5 '''  W oparciu o <code><nowiki>linked_pool</nowiki></code> napisz własny alokator pamięci.
+
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ć?.
 +
}}</div>

Wersja z 19:15, 10 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 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.

Ć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