Wpis z mikrobloga

#c++ #cpp #gamedev #optymalizacja #programowanie Czołem, zerknijcie na te dwa kody, czy zastosowane zmiany sa mniej czy bardziej kosztowne i które? chodzi o:
1. referancja na zmienną i zamiast przekazywanie parametru
2. pobieranie zmiennej z obiektu w petli for zamiast tworzyć nowa zmienną
3. inicjalizacja k poza petlą for
- jakieś porady dodatkowe?

// kod przed

inline void offsetIndex(Mesh&
m, int i)
{

int numfaces =
m.getNumFaces();
for (int k = 0; k < numfaces ); k++)

{

m.faces[k].v[0] += i;

m.faces[k].v[1] += i;

m.faces[k].v[2] += i;

}

}


// kod po

inline void offsetIndex(Mesh& m, int& i)

{

int k;

for (k = 0; k < m.getNumFaces(); k++)

{

m.faces[k].v[0] += i;

m.faces[k].v[1] += i;

m.faces[k].v[2] += _i;

}

}
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Kopytko1:
1. w przypadku typów prostych nie powinno mieć to znaczenia, w przypadku obiektów najlepiej przekazywać const&
2. to może być minimalnie bardziej kosztowne w drugim przypadku, ale nie na tyle żeby się tym zwykle przejmować
3. bez znaczenia
  • Odpowiedz
@Kopytko1: Przy użyciu jakiegokolwiek kompilatora z tego tysiąclecia te zmiany nie wpłyną na wydajność.

ad 1. Adres zmiennej to zapewne 64bitowy integer więc podmiana int na int& nie tylko nie poprawi wydajności, ale może ja nawet minimalnie pogorszyć.
ad 2. Kompilator wygeneruje tymczasową zmienną to tak czy owak, ale generalnie cacheowanie danych to dobry pomysł.
ad 3. W tym przypadku nie ma znaczenia, generalnie lepiej w pętli bo wtedy lepiej orientujesz kiedy spadnie ze
  • Odpowiedz
@Kopytko1:

1. referancja na zmienną _i zamiast przekazywanie parametru

Referencja to lukier składniowy na wskaźnik. Typy proste lepiej przekazywać wartością. Swoją drogą przy inline może to mieć marginalne znaczenie.

2. pobieranie zmiennej z obiektu w petli for zamiast tworzyć
  • Odpowiedz