Volání funkce normálně/ukazatelem – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Volání funkce normálně/ukazatelem – C / C++ – Fórum – Programujte.comVolání funkce normálně/ukazatelem – C / C++ – Fórum – Programujte.com

 

garamond
~ Anonymní uživatel
7 příspěvků
10. 2. 2014   #1
-
0
-

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?

Nahlásit jako SPAM
IP: 2001:718:1001:693:4d24:a0...–
vitamin+8
Grafoman
10. 2. 2014   #2
-
0
-

#1 garamond
Ak volas funkciu cez pointer tak ju prekladac vecsinou nebude moct inlinovat a tym padom to moze byt pomalsie.

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kowalsky950
Stálý člen
10. 2. 2014   #3
-
0
-

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

Nahlásit jako SPAM
IP: 90.176.114.–
vitamin+8
Grafoman
10. 2. 2014   #4
-
0
-

#3 Kowalsky95
Na linuxe existuje x32 ABI, program ktory je takto prelozeny moze vyuzivat 64bit instrukcie ale pointre ma 32bitove :)

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
garamond
~ Anonymní uživatel
7 příspěvků
10. 2. 2014   #5
-
0
-

Nemělo by to být asi stejně rychlé? Když nepoužiju pro funkci inline, tak jo, ne? Protože se v obou případech bude předávat pointer

Nahlásit jako SPAM
IP: 158.196.42.–
Kowalsky950
Stálý člen
10. 2. 2014   #6
-
0
-

#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.

Nahlásit jako SPAM
IP: 90.176.114.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 78 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý