if(m_pstrumień->DajTypStrumienia() != typstrumieniaPlik)
delete m_pstrumień; m_pstrumień = NULL;
if(NULL == m_pstrumień)
m_pstrumień = (PSTRUMIEŃ)new STRUMPLIK(TRUE);
Przydzielanie pamięci i tworzenie uchwytów (plików, pamięci, strumieni itp.) jest kosztowne. Usuwanie pamięci bywa jeszcze bardziej kosztowne, ponieważ menedżery pamięci często odkładają czyszczenie struktur danych aż do momentu pojawienia się operacji delete. W miarę możliwości należy unikać przydzielania i usuwania pamięci oraz uchwytów. We fragmencie „Przed” usuwamy istniejący uchwyt i tworzymy nowy. We fragmencie „Po” natomiast sprawdzamy najpierw, czy uchwyt nie jest uchwytem pliku. W takiej sytuacji, zamiast go usuwać i odtwarzać, po prostu używamy go ponownie.
Oprócz sprawdzania, jak nasz kod przydziela pamięć, możemy także napisać swój własny alokator pamięci. Jeśli wiemy, jak będziemy używać pamięci, to możemy zwiększyć szybkość kodu, tworząc własny menedżer pamięci zamiast standardowego. W takiej sytuacji należy jednak zachować szczególną ostrożność i świadomość wykonywanych czynności. W razie jakichś wątpliwości lepiej użyć standardowych alokato-rów pamięci. Utworzenie własnego menedżera pamięci może poprawić szybkość, ale może też wprowadzić wiele nieprzyjemnych usterek.
128
pisanie szybkiego kodu
//m_pch ma długość m_cch strcpy(pchNowy, m_pch); strcat(pchNowy, pch);
//m_pch ma długość m_cch strcpy(pchNowy, m_pch); strcpy(pchNowy+m_cch, pch);
Tak naprawdę ta wskazówka dotyczy każdej funkcji. Dokładne poznanie działania danej funkcja może pomóc w jej wydajnym użyciu. Szczególną ostrożność trzeba jed-