Dobrý den, když budu ve funkci f1 volat jinou funci f2 je z hlediska náročnosti lepší (stejné) předávat f1 ukazatel na f2 při volání z mainu, nebo funkci f1 prostě nic nepředávat a zavolat v ní f2?
Fórum › C / C++
Volání funkce normálně/ukazatelem
Tady jde spíše než o výkonost a práci programu. Ukazatel na funkci se předává ve chvíli, kdy potřebuješ vysoce dynamický program. Například máš pole a potřebuješ nad ním provést pokaždé jinou operaci (příklad jiný algoritmus pro větší pole a jiný pro menší pole) a takové podobné příklady. Další příklad mě napadá foreach. Jako jeden z parametrů jí předáš ukazatel na funkci a tato funkce se zavolá nad každým objektem.
Z hlediska výkonosti, minimálně se musí předávat ukazatel, takže tady je možná ztráta výkonu (ovšem co si budem, velikost ukazatele záleží na architektuře, takže AMD64 architektura má 64bitový ukazatel => tento ukazatel zabere 8 bytů, co to je).
Druhá věc je inlinovat funkci, ale nepředpokládám že f2 bude tak krátká aby byla inline, takže v tomhle taky problém nevidím.
Takže ano, bude tam slabý pokles výkonu (8 bytů alokování a vražení do zásobníku), ale vzhledem k dnešní výkonosti strojů se o tom nedá ani mluvit. Pořád je to krása oproti jazykům s GB ;-)
Snad jsem pomohl :)
Edit: Jazykům s GC, jinak AMD64 není myšleno pouze platforma AMD, ale celkově 64-bitová platforma
#5 garamond
Pokud funkci předáš jinou funkci jako ukazatel, pak se musí i tento ukazatel zkopírovat do paměti. Zatímco když druhou funkci zavoláš přímo z té první, tak se přímo do kodu přeloží kam se má skočit, tudíž se ušetříš těch pár bytů, jak jsem psal výše.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Volání funkce z jiné třídy ukazatelem typu obecné funkce — založil pretis
Volání metody ukazatelem — založil hlucheucho
Volání stjene funkce 2 programy — založil paja
C# Volání funkce jiného formu — založil Yimo
C# a ASP.net - volání funkce javascriptu — založil JinSunKown
Moderátoři diskuze