Jedna z klasycznych zasad programowania mówi, że używanie obliczeń za pomocą wskaźników jest szybsze, niż używanie indeksowania tablic i dlatego warto pisać trudne do odczytania kody używające wskaźników. Przy dzisiejszych kompilatorach to jednak nie jest do końca prawdą. Pisanie kodu z użyciem tablic da, w większości wypadków, tę samą wydajność, co pisanie kodu wykorzystującego wskaźniki. Oczywiście kod używający wskaźników będzie wyglądał bardziej fachowo.
Spójrzmy na kod maszynowy wygenerowany przez kompilator dla części właściwej pętli we fragmencie „Przed”:
11: |
rgch[ich++] = ' | |
0040103F |
mov |
eax,dword ptr [ich] |
00401045 |
mov |
byte ptr rgch[eax],20h |
0040104D |
mov |
ecx,dword ptr [ich] |
00401053 |
add |
ecx,1 |
00401056 |
mov |
dword ptr [ich],ecx |
A oto kod wygenerowany dla pętli we fragmencie | ||
17: |
*pch++ = 't'; | |
00401099 |
mov |
eax,dword ptr [pch] |
0040109C |
mov |
byte ptr [eax],74h |
0040109F |
mov |
ecx,dword ptr [pch] |
004010A2 |
add |
ecx,1 |
004010A5 |
mov |
dword ptr [pch],ecx |
Cóż, niewielka różnica.
W tym wypadku lepiej byłoby użyć bardziej czytelnego kodu używającego tablic. Mówiąc krótko, klasyczne zasady nie zawsze się sprawdzają. W razie wątpliwości lepiej sprawdzić, co jest rzeczywiście generowane.
Przykład: TestBuffO w pliku misc.cpp
pisanie szybkiego kodu
if(m_pstrumień)
delete m_pstrumień;
m_pstrumień = (PSTRUMIEŃ)new STRUMPLIK(TRUE);
if(m_pstrumień)
{