čas provádění funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

čas provádění funkce – C / C++ – Fórum – Programujte.comčas provádění funkce – C / C++ – Fórum – Programujte.com

 

beb
~ Anonymní uživatel
6 příspěvků
1. 1. 2010   #1
-
0
-

zdravím,
potřeboval bych vědět, jak je možné, že volání určitého kódu ve funkci je mnohem pomalejší něž volaní toho samého venku z funkce?
příklad :



#include <iostream>
#include <windows.h>

int funkce(void)
{
return 5*6+9*7+68*+5+9*5+956486+8&56;
}

int main(){

int x;
int cas=GetTickCount();

for (int i=0; i<100000000; i++)
x=funkce();

int doba=GetTickCount()-cas;

std::cout<<doba;
std::cout<<std::endl;


cas=GetTickCount();

for (int i=0; i<100000000; i++)
x=5*6+9*7+68*+5+9*5+956486+8&56;

doba=GetTickCount()-cas;
std::cout<<doba;
std::cout<<std::endl;

system("pause");
return 0;
}

v mém vcpp to hází 6000 a 250, později jsem zkoušel ještě dev-cpp s vysledkem 500 a 250(přibližně).
Jak je to možné?

Nahlásit jako SPAM
IP: 88.146.167.–
d.mostek0
Návštěvník
1. 1. 2010   #2
-
0
-

Asi to bude režií, která je potřeba na předání vykonávání kódu do funkce (uložení návratové adresy, přepsání registrů atd...).

Nahlásit jako SPAM
IP: 88.146.211.–
www.dominik-mostek.cz
RedDragCZ0
Newbie
1. 1. 2010   #3
-
0
-

Ani to volání funkce není úplně výkonově zadarmo, což se ti na jejích 100000000 zavoláních nějak prostě projeví. Něco můžeš tak možná leda ještě trochu dohnat nadefinováním té funkce jako inline nebo zapnutím optimalizací v release módu.

EDIT: d.mostek mě předběhl o chvíli než jsem se přihlásil. :)

Nahlásit jako SPAM
IP: 212.158.156.–
beb
~ Anonymní uživatel
6 příspěvků
1. 1. 2010   #4
-
0
-

tak díky, ale ten rozdíl ve vcpp je az podivny. No nic, co se da delat.

Nahlásit jako SPAM
IP: 88.146.167.–
KIIV
~ Moderátor
+43
God of flame
1. 1. 2010   #5
-
0
-

zkusil sem to zkompilovat jako C i C++ a pomerne vyrovnane vysledky... 360 a 330 v C a C++ 375 a 328

divne je ze se mi to nekdy zkompiluje a jede to docela rychle.. 47 a 47

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
beb
~ Anonymní uživatel
6 příspěvků
1. 1. 2010   #6
-
0
-

já už nerozumím asi ničemu... teď jsem to zkusil kompilovat jako release a jede to vyrovnaně(správně) a ještě k tomu mnohem rychleji... no nic, tak začnu kompilovat jako release a ono to snad nějak půjde. Díky všem.

Nahlásit jako SPAM
IP: 88.146.167.–
KIIV
~ Moderátor
+43
God of flame
1. 1. 2010   #7
-
0
-

release neuklada hromadu debug informaci

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
1. 1. 2010   #8
-
0
-

To beb : No ked to skompilujes ako realease tak sa zapne kopa optimalizacnych srand (mozu sa napr. inlinovat funkcie ktore to nemaju explicitne napisane ak si kompilator mysli, ze je to dobry napad) ale pochybujem ze sa to bude dat nejako rozumne debugovat.

Nahlásit jako SPAM
IP: 217.118.98.–
RedDragCZ0
Newbie
1. 1. 2010   #9
-
0
-

beb napsal:
já už nerozumím asi ničemu... teď jsem to zkusil kompilovat jako release a jede to vyrovnaně(správně) a ještě k tomu mnohem rychleji... no nic, tak začnu kompilovat jako release a ono to snad nějak půjde. Díky všem.


To, že to jede naprosto vyrovnaně, by za předpokladu vypnutých všech optimalizací rozhodně nebyl očekávaný (tedy správný) výsledek.
A jak tu píše nějaký ten anonym poslední, kompilátor tam může v release módu podle zapnutých optimalizací udělat tuny různých zjednodušení, inline-nutí jednoduchých funkcí, apod. - při mém default nastavení ve VS2008 v release módu se mi to zkompiluje a obojí proběhne za 0ms (nevím, nedisassembloval jsem to, ale téměř určitě to IMO rovnou vyhodnotí jako konstantní výraz a pak už to za běhu vůbec nepočítá). A nikoliv, na běžný vývoj nekompiluj v release módu, nepůjde ti to pořádně nijak debugovat a díky těm optimalizacím ti bude každý build zbytečně trvat o mnoho dýl.

Nahlásit jako SPAM
IP: 212.158.156.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
1. 1. 2010   #10
-
0
-

359 312 mam teda ja ale me to prijde logicky nez se zavola funkce nez se to vrati te promenne a tolikrat snad nikdy funkce v jednom programu pouzivat nebudes

Nahlásit jako SPAM
IP: 85.13.98.–
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, 65 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ý