Az hogy lehet hogy egy javában írt program gyorsabban fut mint ugyanaz a program c++ ban?
javában:
long a = 0;
int b = 0;
while(true){
if(a%1000000000==0){
System.out.println(b);
b++;
}
a++;
}
c++ ban:
unsigned long a = 0;
int b = 0;
while (true) {
if (a % 1000000000 == 0) {
std::cout << b << std::endl;
b++;
}
a++;
}
Kérdező, az első 2 válasszal ne foglalkozz mert nem értenek hozzá.
Példának okáért ubuntu alatt kipróbáltam a kiíratási dolgot:
Egy üres c++ program lefut melybe le van include-olva az iostream:
real 0m0,005s
user 0m0,005s
sys 0m0,000s
Ugye van némi overhead mire betölti a futtatható kódot, mire betölt a process.
Módosítva a program úgy, hogy :
int a;
for (a=0;a<100;a++){
std::cout << a << std::endl;
}
vagyis kiíratva 0-99-ig egymás alá a számokat, így a futási idő összesen:
real 0m0,005s
user 0m0,005s
sys 0m0,000s
-----
Egy üres java kód, vagyis csak maga az üres main:
real 0m0,224s
user 0m0,265s
sys 0m0,037s
Szintén 0-99-ig kiírja a számokat:
int a;
for (a=0;a<100;a++){
System.out.println(a);
}
Futási idő:
real 0m0,242s
user 0m0,297s
sys 0m0,031s
A kódok amiket te írtál egyszerre indítva:
Bal oldalt ahol a c++ tart jobb oldalt ahol a java tart:
4 - 5
7 - 10
11 - 15
15 - 20
18 - 24
Meglepő egyébként. Nem tudok mást mondani minthogy jobban ki van optimalizálva java alatt. Gondoltam hogy a modulo műveletben keresendő, de ha if (a==1000000000){
a=0;
erre cserélem mindkettőbe akkor még inkább a java áll nyerésre. Ez tényleg meglepő.
Nyugtatásképpen ansi c-be, de az is csak akkor ha felkapcsolom a fordítóba hogy optimalizálja a natív kódot az akkor szépen veri a java-t sebességbe konkrétan a te példádra teszteltem.
Kiegészítés:
A c++ is veri a java sebességét szintén a te kódodra vonatkozóan írom, akkor ha a c++ fordítóba is felkapcsolom az optimalizációt, de a leggyorsabb a c a három közül.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!