Miért van az, hogy egy C++ kód, ami két KB, ha lefordítom akkor 4000KB?





Nos, nem feltétlenül. Először is, ha csak nem következik be valószínűtlen esemény, nem annyi bájton lesz a gépi kód, mint amennyibe szövegesen írtad. Aztán lehet includolni olyan állományokat, amik baromi nagyok, de csak 1-1 függvény kell belőlük a programhoz. És amikre még nem gondoltam. :)
Ugyanígy <10 sorból írható olyan program, amihez kevés a RAM-od, bármekkora modul(ok) van(nak) is a gépedben. :)





Nem csinál fölöslegesen semmit, de most gondolj bele.
Van egy halom parancs C++-ban, ami önmagában gépi kódban többszöröse és kell hozzá még egy rakat másik dolog is.
A gépi kódban elég egyszerű utasítások vannak csak, a programozási nyelv maga pedig ehhez képest baromi magas szintű.
De nézzünk csak egy egyszerű példát:
Hasonlítsd össze a C++ kódot mondjuk az assembly-vel (ez áll legközelebb a gépi kódhoz) és akkor itt még csak egy sima szöveg kiírásáról van szó!





A gépi kód nagyon egyszerű, elemi lépésekből áll. A magasszintű programozási nyelvek lényege az, hogy röviden tudsz leírni összetettebb fogalmakat (az utasítás nagyon alapszintű dolog).
No meg az #include olyan, hogy a standard könyvtárat nem tekintjük a program részének, így abból rengeteg kód bejön extraként.










várj, az os nem enged assemblyben programozni, ez nekem uj, sot ugy erzem, en at lettem vagva amikor megis - latszolag ugye - megtettem. Dehat ilyen az elet.
Amugy a gepi kodot inkabb hexaban szokas irni, mert az alapegyseg legalabb 1 byte meretu...





iostream-nél a pont!
De szerintem Passring válasza tipikusan most olyan volt, hogy tudja miről beszél, csak le akarta egyszerűsíteni, hogy a kérdező vagy kevésbé hozzáértők is értsék és ezzel egy felületet nyitott, ahol bele lehet kötni a válaszba.





Két okból:
Mert ami nekünk egy utasításnak tűnik, amögött lehet, hogy több száz, vagy több ezer gépi utasítás áll. Továbbá a fordító sok olyan dolgot is befordít/szerkeszt a futtatható állományba, ami történetesen nem kell. Ez lehet a felhasznált könyvtárak beszerkesztett, de fel nem használt kódja (ugyanis a fordító csak fordít, nem fogja azt lesni, hogy most ténylegesen mit használok fel. Amire utasítják, azt teszi.) de lehetnek pl. nyomkövetési meg hibakeresési információk is.
Igazán az a 400kb alapméret nem is olyan sok. Amikor már gigabájtos ramok meg a legócskább gépekben is negyed terás vinyó van, nem fognak párszáz kilobájton görcsölni.
Egyébként ha emlékeim nem csalnak, a g++ -s kapcsolóval megtiltod, hogy a szimbólumtáblát beszerkessze a futtatható fájlba, és ezzel drasztikusan lecsökkentheted a fájlméretet.
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!