-
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
- 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??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-05-20 Fiat 125p wer. pikup - w PRL moszna było, w III Reczy [pospolitej] nie moszna
- 2024-05-19 Pożar salonu z chińskimi elektrykami
- 2024-05-18 LED
- 2024-05-19 ceny nieruchomości
- 2024-05-18 Szczecin => UX/UI Designer <=
- 2024-05-18 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-18 Warszawa => Software .Net Developer <=
- 2024-05-18 Warszawa => Mid/Senior QA Engineer <=
- 2024-05-18 Ulm => Solution Architect (sichere Kommunikation und IoT-Loesungen <=
- 2024-05-18 Katowice => Head of Virtualization Platform Management and Operating S
- 2024-05-18 Warszawa => SAP WM Consultant / Execution <=
- 2024-05-18 Wrocław => Consultant/Implementer Comarch ERP XL <=
- 2024-05-18 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-05-18 Warszawa => Account Manager (Recruitment Services) <=
- 2024-05-18 Łódź => Salesperson - CRM Systems <=