Czytam książkę Kochana "Programowanie w C". W sekcji Wskaźnik i Tablice na s. 264 mówi:Dlaczego zapętlenie tablicy przy użyciu indeksowania tablic jest wolniejsze niż w przypadku dostępu do wskaźnika?
Ogólnie, proces indeksowania tablicy zajmuje więcej czasu na wykonanie niż robi proces uzyskiwania dostępu do zawartości wskaźnika. W rzeczywistości jest to jeden z głównych powodów, dla których wskaźniki są używane do uzyskania dostępu do elementów tablicy - wygenerowany kod jest ogólnie bardziej wydajny. Oczywiście, jeśli dostęp do tablicy nie jest generalnie sekwencyjny, wskaźniki nie wykonują niczego, jeśli chodzi o ten problem, ponieważ wyrażenie * (wskaźnik + j) zajmuje tyle samo czasu, co wykonywanie, podobnie jak tablica wyrażeń [j] .
Czy ktoś może wyjaśnić, co jest szybsze od czego? Konkretnie, jeśli prędkość macierzy [j] = prędkość * (wskaźnik + j) to, co jest proces indeksowania tablicy i co to jest proces dostępu do zawartości wskaźnika? Istnieją również pytania i odpowiedzi na SO, które wspominają, że tablica [j] jest konwertowana na * (array + j) podczas kompilacji, więc nie powinno być żadnej różnicy.
Podsumowanie: Podaj mi bardzo prosty przykład tego, co mówi Kochan. 2 fragmenty kodu i punkt na szybszym, nie muszą tłumaczyć, dlaczego jest to prawda.
Od jakiego roku jest ta książka? – 2501
Myślę, że to, co mówi Kochan, to że zwiększanie wskaźnika o wielkość elementu jest szybsze niż pomnożenie indeksu przez rozmiar elementu i dodanie go do adresu bazowego. Jest to jeden z tych przypadków, w których różnica jest na tyle mała, że prawdopodobnie nie ma to znaczenia, a jeśli pracujesz na poziomie, na którym naprawdę ma to znaczenie, prawdopodobnie będziesz już świadomy różnicy. – Caleb
http://stackoverflow.com/questions/4534617/lea-instruction – 2501