Kezdőoldal » Számítástechnika » Programozás » C++, miért lassabb az én...

C++, miért lassabb az én megoldásom, ha majdnem ugyan az?

Figyelt kérdés

Csináltam egy structot, hogy istream_iteratoral tudjak egész sort beolvasni de valamiért sokkal lassabb mint ez:


for(std::string s; std::getline(ist, s);)

v.push_back(s);


amit csináltam de lassú:


struct Line

{

std::string line;

friend std::istream& operator>>(std::istream &is, Line &l)

{

std::getline(is, l.line);

return is;

}

};


int _tmain(int argc, _TCHAR* argv[])

{

std::vector<Line> v{std::istream_iterator<Line>{ist}, std::istream_iterator<Line>{}};


return 0;

}



2015. jún. 14. 12:22
 1/4 iostream ***** válasza:
Hogy fordítod? Ha nem használsz semmi optimalizációt, akkor könnyen lehet, hogy nem inlineol néhány függvényhívást, és elvész egy csomó processzorciklus.
2015. jún. 15. 21:49
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

Legfeljebb csak kis eltérésnek kéne lennie szerintem.


Azért lassabb mert míg az első esetben csak egy stringet hozol létre és tárolod el minden iterációban, a második esetben létrehozol egy Line típusú objektumot, feltöltöd a stringgel és az egész Line objektumot tárolod simán csak a string helyett. Ez plusz egy lépés.


Viszont a Line objektum létrehozásának ideje elenyészőnek kéne lennie a szöveg lemezről való beolvasásához képest, ezért nem kéne hogy láss különbséget. Az utóbbi eset egyébként kicsivel több memóriát használ, és a szöveg sem közvetlenül éred el.


Csináltam egy kis tesztet, az eltérés a kettő között körülbelül 2% nálam. Ha nálad sokkal nagyobb az eltérés, lehet hogy más lesz a probléma.

2015. jún. 15. 21:52
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
Memóriabeli elhelyezkedés egy kicsit más a második esetben, az istream_iterator-ban még lehet egy plusz indirekció is (ezt nem tudom, nem néztem utána), ez mind arra utal, hogy ha valami különbség van, azt a memóriaműveletek (ezáltal cache) okozza, de tényleg a fájl olvasásnak kellene dominálni a futásidőt, szóval kéne a konkrét kód, hányszor fut, mekkora a fájl, honnan 'jön' a stream, ilyenek.
2015. jún. 16. 11:19
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Közben rájöttem ha félmillió sort olvasok be illene reservet használni a vektronál. Köszi a válaszokat.
2015. jún. 16. 22:56

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!