Názor ke článku JSON pro C++11 s immutabilním DOMem. od ebik - Když už jdete do technikálií, tak switch může...

  • 13. 1. 2017 20:23

    ebik (neregistrovaný)

    Když už jdete do technikálií, tak switch může být zoptimalizován kompilátorem různě, ale nebude to horší než přečtení hodnoty z jedné statické tabulky a následně nepodmíněný skok.

    Tabulka virtuálních metod je něco jako
    načtení hodnoty z tabulky určené odkazem - takže nejprve součet offsetu funkce a počátku tabulky a následně načtení hodnoty
    ale hlavně _volání funkce_ - tedy vytvoření nového stack frame, napushování registrů na zásobník podle calling convention a nastrkání hodnot do správných registrů. A při návratu reverzní operace. U nepodmíněného skoku žádný návrat není, maximálně další nepodmíněný skok.

    Nicméně toto vůbec nemusí být bottleneck programu. Bottleneckem COW přístupu můžou být právě alokace, a dokonce se může stát, že to co se často zpracovává nebude v paměti blízko sebe a dojde k missům v nějakých procesorových cachích. Dá se totiž předpokládát, že kompilátor bude umět kód zkompilovat tak, že tabulka virtuálních metod, obzvlášť pokud bude často používaná a nebude měněná, bude v rychlé procesorové cachi, zatímco vlastní zpracovávaná data budou třeba kvůli alokacím ke cachím necitlivá.