anoniem Geplaatst: 27 september 2003 Delen Geplaatst: 27 september 2003 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! Quote Link naar reactie
anoniem Geplaatst: 28 september 2003 Auteur Delen Geplaatst: 28 september 2003 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! Quote Link naar reactie
anoniem Geplaatst: 29 september 2003 Auteur Delen Geplaatst: 29 september 2003 Bedankt voor je antwoord. Als de iostream-library gewoon zo groot is, dan ligt het niet aan mijn compiler. Da's een geruststelling :) Het gebruik van std::printf() i.p.v. prinf() is bij mij trouwens niet afgedwongen door mijn compiler. Quote Link naar reactie
anoniem Geplaatst: 29 september 2003 Auteur Delen Geplaatst: 29 september 2003 Visual c vindt std::printf() ook niet echt leuk, Borland wel weer. Lekker verwarrend he.... Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen