C# je rychlejší než C/C++?

x86

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #45 kdy: 13. 04. 2013, 18:35:44 »
Popravde receno neexistuje zadny realny duvod proc by melo byt C++ obecne vyrazne rychlejsi nez Java.
Popravdě řečeno, jedním z důvodů je např. (duplicitní) softwarová snaha JVM o to, co už v moderním procesoru způsobuje na hardwarové úrovni Branch Target Buffer. Ale to si chce místo siláckých řečí přečíst a pochopit alespoň manuály od Intelu. Dalším důvodem je to, že C++ nutí programátora daleko víc přemýšlet o kódu, který píše, už jen proto, že narozdíl od Javy musí nějak uvolňovat paměť.


x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:C# je rychlejší než C/C++?
« Odpověď #46 kdy: 13. 04. 2013, 22:52:18 »
Čistě řečnická otázka: je C napsané v C#, nebo je C# napsaný v C?  :)

andy

Re:C# je rychlejší než C/C++?
« Odpověď #47 kdy: 13. 04. 2013, 23:08:01 »
Tipnul  bych si, že C je napsané v C a C# je napsaný v C# (VM asi bude v C++)....

ferren

Re:C# je rychlejší než C/C++?
« Odpověď #48 kdy: 14. 04. 2013, 00:54:39 »
kdyby nekiho tady napadlo pridat jeden radek s printfem, aby se iterace musela vykonat, ubylo by 50% prispevku o optimalizacich;-)

Jakub Galgonek

Re:C# je rychlejší než C/C++?
« Odpověď #49 kdy: 14. 04. 2013, 01:08:53 »
kdyby nekiho tady napadlo pridat jeden radek s printfem, aby se iterace musela vykonat, ubylo by 50% prispevku o optimalizacich;-)

Pak by ale ten experiment nebyl skoro vůbec o překladačích jako spíše o implementaci IO :-)


Pupi

Re:C# je rychlejší než C/C++?
« Odpověď #50 kdy: 14. 04. 2013, 21:15:43 »
C/C++ je urcite rychlejsie nez C#. Preto sa C/C++ pouziva v roznych odvetviach kde je potreba rychleho spracovania a rychlej odozvy. Moze byt pripad, ze v niecom C# predbieha C/C++ alebo obecne vzate je rychlejsi C/C++

Re:C# je rychlejší než C/C++?
« Odpověď #51 kdy: 14. 04. 2013, 23:26:49 »
Mimochodom tiez sa tu nespomina ze aj ten c# VM , okrem jeho kompileru, robi nejaku JIT optimalizaciu. Takze v case sa moze spustena aplikacia pod c# teoreticky zrychlovat. Na druhu stranu ak je povedzme pametovo narocna, hlavne v castej alokacii, tak potom moze dost neprijemne do vykonu zasiahnut GC. Proste pri takejto jednoduchej ukazke kodu je to uplne zbytocna polemika.
A mimochodom c# alebo aj java sa nepouzivaju alebo nepresadili hlavne koli svojmu vykonu/nevykonu. Dovod preco vznikly a pouzivaju sa je hlavne bezpecnejsi kod a rychlejsi development a teda aj vyssiu produktiviu. Dan za to moze byt prave vykon, pametova narocnost a aj silna zavyslost na VM.

DK

Re:C# je rychlejší než C/C++?
« Odpověď #52 kdy: 15. 04. 2013, 07:27:23 »
nemo: java ze se nepouziva? dovolim si tvrdit opak :) ono tim, ze to bezi ve VM je to sice pametove narocnejsi, nez c/c++, ale vzhledem k dlouhodobejsi cene pameti je to uz uplne jedno

a prave ta java se na serverove casti pouziva hodne casto (zatimco c# se pouziva prevazne pouze pro desktopove windows aplikace)

JSH

Re:C# je rychlejší než C/C++?
« Odpověď #53 kdy: 15. 04. 2013, 09:03:54 »
nemo: java ze se nepouziva? dovolim si tvrdit opak :) ono tim, ze to bezi ve VM je to sice pametove narocnejsi, nez c/c++, ale vzhledem k dlouhodobejsi cene pameti je to uz uplne jedno
Myslím, že jsi nepochopil, co nemo napsal. On nepsal, že by se Java a C3 nepoužívaly, ale že se používají z jiného důvodu, než je maximální výkon.

User

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #54 kdy: 15. 04. 2013, 09:31:10 »
Jen tak na okraj, čím větší vám jazyk dá svobodu, tím menší prostor má optimalizátor. Třeba potřebujete obsah celočíselné proměnné x a tak si ji načtete do registru. Pak přes ukazatel na double zapíšete někam do paměti. A teď chcete znovu použít proměnnou x. Musí ji překladač nechat znovu načíst z paměti anebo stačí použít hodnotu v registru? Ne, že bych neznal odpověď, ale co myslíte :-)?

Záleží jestli tu hodnotu v paměti mohl změnit jiný thread nebo ne. Různé jazyky toto řeší různě, například Java je navržená tak že pokud programátor explicitně neřekne že se ta paměť z jiného threadu měnit může (volatile nebo synchronizací) tak platí že se měnit nemůže (což programátor musí zaručit znalostí algoritmu - a běda pokud ne, z toho jsou hodně špatné chyby) a tedy hodnotu z registru lze použít.

Jakub Galgonek

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #55 kdy: 15. 04. 2013, 09:56:54 »
Jen tak na okraj, čím větší vám jazyk dá svobodu, tím menší prostor má optimalizátor. Třeba potřebujete obsah celočíselné proměnné x a tak si ji načtete do registru. Pak přes ukazatel na double zapíšete někam do paměti. A teď chcete znovu použít proměnnou x. Musí ji překladač nechat znovu načíst z paměti anebo stačí použít hodnotu v registru?

Záleží jestli tu hodnotu v paměti mohl změnit jiný thread nebo ne.

V tomto případě záleží hlavně na tom, zda ten ukazatel na double náhodou neukazuje na oblast paměti, kde leží proměnná x.

gamer

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #56 kdy: 15. 04. 2013, 10:08:29 »
paměť z jiného threadu měnit může (volatile nebo synchronizací)
volatile neříká nic o tom, že se pamět může měnit z jiného threadu, ale že se může měnit asynchronně. volatile na sychronizaci mezi thready použít nejde.
http://molecularmusings.wordpress.com/2012/03/05/volatile-thread-synchronization/

User

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #57 kdy: 15. 04. 2013, 10:32:54 »
paměť z jiného threadu měnit může (volatile nebo synchronizací)
volatile neříká nic o tom, že se pamět může měnit z jiného threadu, ale že se může měnit asynchronně. volatile na sychronizaci mezi thready použít nejde.
http://molecularmusings.wordpress.com/2012/03/05/volatile-thread-synchronization/

Psal jsem o Javě a tam se od verze 5 volatile už pro synchonizaci mezi thready použít dá.

User

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #58 kdy: 15. 04. 2013, 10:41:03 »
Jen tak na okraj, čím větší vám jazyk dá svobodu, tím menší prostor má optimalizátor. Třeba potřebujete obsah celočíselné proměnné x a tak si ji načtete do registru. Pak přes ukazatel na double zapíšete někam do paměti. A teď chcete znovu použít proměnnou x. Musí ji překladač nechat znovu načíst z paměti anebo stačí použít hodnotu v registru?

Záleží jestli tu hodnotu v paměti mohl změnit jiný thread nebo ne.

V tomto případě záleží hlavně na tom, zda ten ukazatel na double náhodou neukazuje na oblast paměti, kde leží proměnná x.

Takovým prasárnám jsem už od doby co programuji v Javě odvyknul, neboť Java (nebo i C#) takové nebezpečné operace s ukazateli naštěstí znemožňuje. Ale i kdyby náhodou ten ukazatel ukazoval na oblast paměti, kde leží proměnná x, platí co to jsem napsal - bacha na thready!

Jakub Galgonek

Re:C# je rychlejsi ako C/C++?!?!
« Odpověď #59 kdy: 15. 04. 2013, 10:55:10 »
Takovým prasárnám jsem už od doby co programuji v Javě odvyknul

Je to prasárna, ale o to tu nešlo ...