eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingWywołanie wirtualne kontra wskaźnik do funkcji - optymalizacjaRe: Wywołanie wirtualne kontra wskaźnik do funkcji - optymalizacja
  • Data: 2009-08-06 07:22:36
    Temat: Re: Wywołanie wirtualne kontra wskaźnik do funkcji - optymalizacja
    Od: Paweł Kierski <n...@p...net> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Mariusz Marszałkowski wrote:
    > Witam
    >
    > Mam pytanie:
    > Czy w kompilatorach C++ ktoś zaimplementował jakieś optymalizacje do
    > metod wirtualnych? Chodzi mi o jakąś technikę, dzięki której kompilator
    > może wygenerować szybszy kod dla wywołań wirtualnych niż dla zwykłych
    > wskaźników do funkcji.
    >
    > Można w C stworzyć np. taką strukturę:
    >
    > struct X {
    > void (*metoda_1)( struct X *x );
    > void (*metoda_2)( struct X *x , int a , int b );
    > int a,b;
    > };
    >
    > A następnie posługiwać się nią bardzo podobnie jak klasą z metodami
    > wirtualnymi:
    >
    > struct X *x = malloc(sizeof(struct X));
    > inicjalizacja( x );
    > x->metoda_1( x );
    > x->metoda_2( x , 1 , 2 );

    Wątpię - implementacja w C++ może być nawet wolniejsza, bo odpowiada
    raczej:

    struct X {
    vptr_X* vptr;

    int a, b;
    };

    struct vptr_X {
    void (*metoda_1)( struct X *x );
    void (*metoda_2)( struct X *x , int a , int b );
    };

    a wywołania są niejawnie rozwijane do:

    x->vptr->metoda_1(x);

    Oszczędza to miejsce w obiekcie, upraszcza RTTI (vptr_X tak naprawdę
    może zawierać więcej informacji o klasie, np. informacje o klasach
    bazowych), upraszcza inicjalizację obiektu (wypełnienie jednego pola).

    Optymalizacja może dotyczyć sytuacji ze znanym statycznym typem -
    wtedy po prostu wołana odpowiednia jest metoda (statycznie znany adres).

    To "wolniejsze" to jednak co najwyżej dodatkowe odwołanie do pamięci.
    A jeśli bijesz się o nanosekundy (bo wszystkie inne możliwości
    optymalizacji wykorzystąłeś), to i tak raczej omijasz polimorfizm,
    jakkolwiek zaimplementowany.

    --
    Paweł Kierski
    n...@p...net

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: