Zdravím, mám čistě technickou otázku. Čím to je že stejný algoritmus mi při zkompilování v různých prostředích běží různě rychle? Zkoušel jsem to na quick sortu pole o 10 milionech prvků. Dev-Cpp - 3 vteřiny, Code::Blocks - 6 vteřin, VS2010 - 9 vteřin (cca stejně jako Java v NetBeans). Optimalizaci mám u všech nastavenou na maximální rychlost. U VS ta optimalizace nebyla znát vůbec, u Code::Blocks trochu a u Dev-Cpp hrozně moc (před ní cca 12 vteřin). Jenom mě zajímá jestli je to kompilátorem a nebo jestli je ještě něco co se u VS a Code::Blocks dá nastavit aby se rychlost zvedla. Ne že bych to potřeboval ale zajímá mě to.
Fórum › C / C++
Rychlost
A porovnáváš debug nebo release build? Na debug build se neprovádí všechny optimalizace a je plný debugovacích informací, proto je pomalejší.
Mne jen napada, ze treba VS dava do funkci check na tzv security cookie (pokud to neni vypnuto), cimz se kontroluje preteceni stacku (takze bezpecnostni featura). Takze pokud bys volal neco rekurzivne hodne mockrat nebo jinak volal hodne funkci, tak by to mohlo delat nejaky rozdil.....teda za predpokladu, ze treba Code::Blocks nema neco podobneho (ale mam pocit, ze to je ciste MS vymysl).
Co to je za kod? Pripadne by se dal porovnat ASM....
#4 Tom
Výsledný kód vypadá takhle:
#include <iostream>
#include "C++ Basics/Basics.hpp"
using namespace std;
using namespace Basics;
int main()
{
Array<double> arr(10000000);
for(int i=0;&arr[i];i++)
arr[i] = rand() % 100;
arr.sort();
cout<<"...";
getchar();
}
A potřebuješ ve stejné složce mít tohle:
http://leteckaposta.cz/434137979
Je to jakási moje vlastní knihovna.
Preco nepouzies std::array, std::vector a std::list? Tie tvoje kontainery neponukaju ziadnu specificku funkcionalitu kvoly ktorej by si ich musel programovat odznova. Navyse su nekompatibilne s funkciamy a kontainerami so stl.
#6 vitamin
Jsou kompatibilní s Céčkovými knihovnami které dost používám. Psal jsem to hlavně proto abych se na tom pořádně naučil jak fungujou třídy, šablony a přetěžování operátorů, pak jsem do toho tak nějak pořád přidával věci a když to funguje tak proč to nepoužívat. STL nepoužívam, zatim jsem jí nikdy nepotřeboval a třeba standardní třída string se mi moc nelíbí, kvuli tomu jsem s tím částečně začal, chtěl jsem si napsat vlastní třídu pro práci s řetězci, takovou která bude umět třeba i zpracovat wxString z wxWidgets, abych si nemusel pamatovat její metody (pro wx mám jinou verzi). Všechny ty 4 třídy jsou kompatibilní mezi sebou a fungujou tak jak mě to vyhovuje. Až na List která je při velkém počtu prvků poněkud pomalá, ale tak dlouhej List jsem snad nikdy nepoužil.
mimochodem sablony v C++ dokazou udelat velice zajimave optimalizace ... takovej qsort z C je oproti sortu nad kontejnerem vyrazne pomalejsi ... protoze se v C programator zbavuje vsech dulezitejch veci.. jako treba jake typy jsou parametry a podobne viz: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style
to samy kdyz jsou data pekne v pameti za sebou nez spojovy seznamy pointeru nekam... (kvuli procesorovy cache)
#10 vitamin
#9 KIIV
Tam o ten kód ani tak moc nejde, ten rozdíl v rychlosti platí všeobecně, já sem to jenom testoval konkrétně na quick sortu, ale stejný výsledek bude třeba u nějaké dlouhé smyčky která ani nic nedělá. Nebo třeba jenom deklaruje proměnnou, kdyby nic nedělala tak je dost možné že jí kompilátor přeskočí.
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
Rychlost funkce — založil peter
Rychlost Timeru — založil Martin Morawiec
Rýchlosť tlače — založil echo112
Rychlost Windows XP — založil Siemens
Moderátoři diskuze