no więc chciał bym sie dowiedziec ile to właściwie kosztuje w rzecz ze w googlach nie ma o tym za wiele a jak juz jest to hmm nie mam porownia tzn. jesli ktos by mogl mi to przetlumaczyc na chlopski rozum siegniecie do metody wirtualnej ile to jest ifów czy tez porownian (==) ?
no więc chciał bym sie dowiedziec ile to właściwie kosztuje w rzecz ze w googlach nie ma o tym za wiele a jak juz jest to hmm nie mam porownia tzn. jesli ktos by mogl mi to przetlumaczyc na chlopski rozum siegniecie do metody wirtualnej ile to jest ifów czy tez porownian (==) ?
Ja bym tak dał z 50 PLN ale mogę się mylić :P
O jakich ifach i porównaniach mówisz???!!!
Wywołanie wirtualne nie kosztuje nic jeśli jest znany dokładny typ obiektu ale nie wskaźnik czy referencja (inline też może być, a co...):
class A
{
public:
virtual foo() {}
};
//...
A a;
a.foo(); // tu kompilator wie, że to ma być A::foo()
Jeżeli jest wskaźnik lub referencja to kosztuje jedną dereferencję adresu z tablicy funkcji wirtualnych (result may vary - zależy od kompilatora, sposobu kompilacji, itd.)
A *a;
a->foo(); // tu już kompilator nie wie co to może być
</cpp>
ile to jest jedna dereferencja ? tzn. co wiecej kosztuje :
a->foo();
czy:
int a,b;
if(a==b);
Swoja droga co ma piernik do wiatraka, a tym samym porownanie do wywolania metody z obiektu ?
62: s->foo();
004011EB mov ecx,dword ptr [ebp-4]
004011EE call @ILT+20(A::foo) (00401019)
63:
64: int a,b;
65: if (a==b)
004011F3 mov ecx,dword ptr [ebp-8]
004011F6 cmp ecx,dword ptr [ebp-0Ch]
004011F9 jne main+3Dh (004011fd)
co robi call oraz co robi cmp i jne chyba nie musze pisac ? Wiec teraz z tego sporobuj wysnuc jakies konstruktywne wnioski dla siebie bo ja nie widze sensu porownywania tych dwoch rzeczy.