Ga naar inhoud

C++: <iostream> vs. <cstdio>


anoniem

Aanbevolen berichten

Hallo! Vraag over <iostream> en <cstdio>/<stdio.h>. Ik gebruik mingW/g++ als compiler. Als ik onderstaande C++-code compileer, [code:1:13933169b2] #include <iostream> int main ( int argc, char **argv ) { std::cout << "Hallo wereld!" << std::endl; return 0; } [/code:1:13933169b2] dan resulteert dat in een executable van 418.026 bytes. Met de -s vlag, voor het strippen van symbolische info, wordt dat een executable van 214.016 bytes. Echter, als ik het volgende, traditionele C-voorbeeld compileer, [code:1:13933169b2] #include <cstdio> int main ( int argc, char **argv ) { printf("Hallo wereld!\n"); return 0; } [/code:1:13933169b2] levert dat een executable van slechts 14.511 bytes op. Een aanzienlijk verschil! Mijn vragen daarom: (1) is de <iostream>-library dusdanig groot waardoor dat verschil verklaard wordt, of is de C++-IO-bibliotheek van mingW gewoon omvangrijk geprogrammeerd? (2) Indien de eerste: bestaat er ook een mogelijkheid om de omvang van de exe's te beperken als je alleen de std::cout en std::cerr nodig bent? (3) Gebruikt iemand een andere compiler die kleinere executables oplevert bij gebruik van <iostream>? Dank!
Link naar reactie
De iostream-"library" maakt gebruik van (heel veel) multiple inheritance, voor alleen std::cout heb je zoiets van nog 6 andere header files nodig, die door <iostream> worden geinclude. De iostream-library is inderdaad erg groot en zwaar. De stdio.h library maakt geen gebruik van inheritance, simpelweg omdat er in C geen classes/inheritance bestonden. Waarschijnlijk is bij jouw compiler printf() gewoon een simpele aanroep naar een bios-output functie, of een platform-api, nadat de formatting gedaan is. Trouwens, als je <cstdio> gebruikt, moet je volgens mij ook std::printf() gebruiken i.p.v. printf(), want alles zit dan in de std-namespace. Andreas -- Don't try to confuse me with the facts!
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...