057 TIF

057 TIF



Operator new generuje bardzo dużo kodu. Jak widać w pokazanym fragmencie kodu maszynowego, najpierw wywołuje się operator new, a następnie konstruktor. Przy każdym wywołaniu operatora new powstaje tyle właśnie dodatkowego kodu.

We współczesnych procesorach większym obciążeniem jest rozwlekły kod niż dodatkowe wywołania funkcji, ponieważ dłuższy kod może wymagać wykorzystania pomocniczej pamięci podręcznej. (Lub gorzej, może zmuszać procesor do pobierania kodu niebędącego w pamięci podręcznej.) Wymiana zawartości pamięci podręcznej zabiera więcej czasu, niż dodatkowe wywołanie funkcji.

We fragmencie „Po” utworzyliśmy funkcję składową wykonującą operację new. Zamiast wywoływać samą operację new, wywołujemy tę funkcję. W efekcie otrzymujemy znacznie mniej generowanego kodu, a wydajność powinna wzrosnąć.

Przykład: klasa RefCounted w pliku access.cpp

Przeciążanie operacji new wraz z przeciążaniem operacji dełete

unikanie awarii; unikanie strat pamięci

Przed

void *operator new(t_rozm cbPrzydziel)

{

return malloc(cbPrzydziel);

}

Po

void ^operator new(t_rozm cbPrzydziel)

{

return malloc(cbPrzydziel);

}

void operator delete(void * pv)

{

free(pv);

}

Do zwalniania pamięci trzeba używać tego samego menedżera pamięci, co do jej przydzielania. W przeciwnym wypadku nastąpi awaria wówczas, gdy inny dezalokator spróbuje zwolnić pamięć, o której nic nie wie. Na przykład jeśli do przydzielania pamięci używamy menedżera stosu Windows, to do jej zwolnienia trzeba użyć operacji HeapFree, a nie domyślnej operacji dełete.

Przykład: klasa Refcounted w pliku access.cpp


Wyszukiwarka

Podobne podstrony:
Wersja zakładająca, że operator new generuje wyjątek w przypadku braku wolnej pamięci: char * s = 0;
162 TIF Przeprowadzenie niektórych obliczeń zabiera bardzo dużo czasu. Na przykład Pentium ma wbudow
058 TIF Operator dodawania wprowadza duży narzut . pisanie czytelnego kodu Kod źródłowy Napis operat
Wstęp. 13 rekina, nie mówiąc już o największych ssakach — wielorybach, których bardzo dużo znajduje
MG 71 Operatory konkatenacji i agregacja•    Bardzo przydatny operator dla manipulac
skanuj0018 (263) 40 Grafika menedżerska i prezentacyjna jak w tym przypadku, jest ich bardzo dużo: .
refleksji naukowej i upowszechnianiu dorobku naukowego. Bardzo dużo zajmowaliśmy się problemami
IMG! BLOK 1 Wyrazów z „u” do zapamiętania jest bardzo dużo. Piszemy je tam, gdzie nie możemy zastoso
IMG&81 22. Ptaki to najbardziej jednorodna pod względem budowy gromada kręgowców. 2ach bardzo dużo c
IMG623 - Dobry wieczór! Przepraszam za spóźnienie, ale wiozę bardzo dużo paczek i dlatego jadę
Obraz0 (53) Znakomity wzrok: -duże oczy -bardzo dużo włókien w nerwie wzrokowym(2x więcej niż u czł

więcej podobnych podstron