Kezdőoldal » Számítástechnika » Programozás » Az hogy lehet hogy egy javában...

Tomi 11 kérdése:

Az hogy lehet hogy egy javában írt program gyorsabban fut mint ugyanaz a program c++ ban?

Figyelt kérdés

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++;

}



2019. febr. 16. 13:21
 1/4 anonim ***** válasza:
A C++-ban nem vagyok otthon, de a kiíratás rendszerint egy elég lassú folyamat, próbáld meg lemérni az elapsed timeot helyette (és nem a kiíratás sebességét).
2019. febr. 16. 16:01
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
Felhívnám rá a figyelmed, hogy ez nem ugyanaz a program. Őszintén szólva fogalmam sincs hogy van implementálva a háttérban a println és a cout, de nyilván nem ugyanúgy, tehát lehet miatta sebességbeli különbség.
2019. febr. 16. 16:19
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:

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.

2019. febr. 16. 23:29
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

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.

2019. febr. 16. 23:36
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!