-
Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!new
s.nask.org.pl!news.onet.pl!not-for-mail
From: Paweł Kierski <n...@p...net>
Newsgroups: pl.comp.programming,pl.comp.lang.c
Subject: Re: Wywołanie wirtualne kontra wskaźnik do funkcji - optymalizacja
Date: Thu, 06 Aug 2009 09:22:36 +0200
Organization: http://onet.pl
Lines: 58
Message-ID: <h5e0bt$qa5$1@news.onet.pl>
References: <h5d3t9$g7h$1@inews.gazeta.pl>
Reply-To: n...@p...net
NNTP-Posting-Host: 91.197.12.15
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1249543357 26949 91.197.12.15 (6 Aug 2009 07:22:37 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Thu, 6 Aug 2009 07:22:37 +0000 (UTC)
User-Agent: Mozilla-Thunderbird 2.0.0.0 (X11/20070601)
In-Reply-To: <h5d3t9$g7h$1@inews.gazeta.pl>
Xref: news-archive.icm.edu.pl pl.comp.programming:183031 pl.comp.lang.c:283983
[ ukryj 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
Następne wpisy z tego wątku
- 06.08.09 09:52 Jakub Debski
- 09.08.09 20:17 MaciejS
- 10.08.09 03:43 Mariusz Marszałkowski
- 10.08.09 07:42 MaciejS
- 10.08.09 10:39 Mariusz Marszałkowski
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-25 Tak wiem.... To oczywiste ale jak oni dzisiaj dziadują na materiale
- 2025-02-25 rozliczenia policji
- 2025-02-25 Echhhhhh. Marzy mi się SWAP Audi A2 z 1.8 T ;-)
- 2025-02-25 Warszawa => Analityk Biznesowo-Systemowy <=
- 2025-02-25 Warszawa => SQL Developer <=
- 2025-02-25 Zbigniew Ziobro śmie sugerować "niedostatki niezawisłości" sędzi (wątpliwości co do bezstronności)
- 2025-02-25 Kraków => DevOps Engineer (Junior/Regular) <=
- 2025-02-25 Kraków => Front-end Developer <=
- 2025-02-25 Szpital
- 2025-02-24 Gniazdo + wtyk
- 2025-02-24 Dyrektor Toyoty miał rację. Elektryki to ślepa uliczka
- 2025-02-24 Białystok => System Architect (Java background) <=
- 2025-02-24 Białystok => System Architect (background deweloperski w Java) <=
- 2025-02-24 Białystok => Solution Architect (Java background) <=
- 2025-02-24 Warszawa => Data Engineer (Tech Leader) <=