# 9/9 Időpont ma 22:52
Nem azt írtam, hogy a C++ nyelv gyorsabb (belemehetnénk ebbe is de ennél az én időm is drágább), hanem azt, hogy a C++ előnnyel indul. Mégpedig azzal az előnnyel, hogy egy virtuális gép alapvetően egy extra "réteg", ami a C++-nál nincs meg. Egy extra rétegen keresztül pedig alapjában véve lassabban fogod elérni a hardvert.
Lehet belekeverni optimalizálást, de abban se lehetsz biztos, hogy egy optimalizált Java gyorsabb egy optimalizálatlan C++-nál.
A fejlesztő, a hardver és minden egyéb tényező pedig nem független, de jelentéktelen, és csak mérhető, de nem előre meghatározható.
Éppen ezért fogalmaztam úgy, hogy a C++ előnnyel indul (amit ledolgozhat a Java, de köröket nem fog ráverni az biztos), nem pedig úgy, hogy egyértelműen, minden esetben gyorsabb.
> Ellenben a JVM (és más nyelvek) JIT compilere képes az aktuális futási környezethez 100%-ban igazodóan optimalizálni a programot, míg az előre fordított program maximum közös nevezőhöz köthető, ami nagyon nem optimális.
Keress rá hogy function multiversioning. Képzeld el, hogy lehet azonosítani a hardware-t x86-os architektúrán, és annak a processzornak megfelelő kódot generálni. Ugyanezt meg lehet csinálni különböző dll-ek betöltésével futásidőben, amik egy-egy processzorra vannak optimalizálva. Aminek csak annyi overhead-je van mint a dll használat és a Java JIT-je nem optimalizálhat annyira hiszen az a futást lassítaná.
#12: Ez igaz, de ebből sem találsz minden CPUID-nak megfelelőt, csak közelítéssel. Ettől függetlenül persze kiváló módszer a (fél-)dinamikus optimalizációra, és a runtime overheadje is minimális; ezutóbbival egy akármilyen JIT handicappel indul.
Visszakanyarodva az eredeti kérdéshez: Mint látod, kedves kérdező, nincs sok értelme a kérdésednek azon felül, hogy potenciálisan vitát generál. Tapasztalataim alapján tartom magam mindahhoz, amit előzőleg állítottam, de ha nagyon nem tudsz egzakt válasz nélkül élni, kénytelen leszel "megcsinálni a házidat" és ALAPOS kutatást végezni ezügyben, including, but not limited to:
- Assembly
- Compiler theory
- C/C++ internals
- Memory management
- System calls
Ha erre esetleg nem volna 1-2 felesleges éved, akkor inkább elégedj meg azzal, hogy bár elvileg gyorsabb is lehetne egy C-s kód egy tisztességes OO C++-osnál, a valóságban, ha egyáltalán így is van, annyira nem jön ki a különbség, hogy érdemes legyen ezzel foglalkozni; vannak sokkal lényegesebb dolgok ennél.
És mi értelme van C -ben programozni ha C++ -ban ugyan azt megírhatod és lefordul, de használhatod a C++ előnyeit ahol jól jön?
Gyorsabb meg úgy is az lesz amelyikre jobb kódot generál a fordító.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!