[closed] namespace std und fstream



  • Moin zusammen!

    Zu meinem Problem:

    Ich würde gerne eine Datei einlesen unter C++.
    Ok, dann fstream, using namespace std etc verwenden bzw die entsprechenden Befehle.

    Mir stellt sich nun die Frage, ob man ohne den Namensraum (ich weiß, es wird verwendet um die jeweiligen Bezeichner zu unterscheiden 🤡 )

    Wenn es eine C - "Version" gibt könnt ihr gerne posten. Ich programmiere eher lieber in C++. Und ja, C++ stammt von C und ja, man könnte auch gleich in C schreiben 😉

    Mir geht es lediglich um die Größer der exe (von wenige hundert kB auf fast 5 MB) durch "using namespace std".

    P.S. Ich verwende Dev-C++ (Orwell update 5.4) unter WinXp

    Danke für eure Hinweise

    Grüße jonny_1234



  • using namespace std ändert nichts an der Größe der EXE!
    Gar nichts. Man sieht es nicht einmal im Assemblercode.
    using namespace std sagt dem Compiler nur, wenn du einen Namen siehst, der nicht im globalen Namensraum zu finden ist, schau im Namespace std nach.

    Das C Programm wird aber kleiner sein, weil die C++ Standardbilbiothek, wenn statisch dazu gelinkt, die Executable gigantisch aufbläht.
    Schau auch hier: http://stackoverflow.com/questions/4178910/compiled-c-executables-huge



  • Danke für den Hinweis.

    Mir stelt sich nun die Frage, wie man weiter die Größe der einzelnen Anwendung verkleiner kann.

    Computerviren (Nein, ich möchte keine schreiben und nein, ich beabsichtige auch keine Hilfe in dieser Richtung hier zu erhalten) besitzen nach meiner Kenntnis eine viel kleinere Größe.

    Diese besitzen auch einen größen "Funktionsumfang" als z.B. dieser Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int funcfilein() {
    	FILE *fp;
    	int i, temp, arrayin[1000], index=0;
    	fp = fopen("task.txt", "r");
    	if(fp == NULL) {	
    		printf("Datei konnte nicht geoeffnet werden.\n");
    	}
    	else  {	
    		// komplette Datei zeichenweise ausgeben
    		while((temp = fgetc(fp))!=EOF) {
    			printf("%c", temp);
    			arrayin[index]=temp;
    			++index;
    		}
    		fclose(fp);
    	}
    	printf("\n");
    }
    

    (Größe: 556 kB/exe; WinXp; DevC++ (Orwell 5.4))

    Da stellt sich meine Frage, mit welchen Möglichkeiten man dies erreichen kann.



  • Indem die Stdlib dynamisch linkt und einen Releasebuild macht.



  • Du hast mehrere Möglichkeiten, die Binary zu verkleinern: Auf C++-Streams verzichten, Code auf Grösse statt Geschwindigkeit optimieren, so viel wie möglich dynamisch linken.

    Aber du zahlst einen Preis dafür. Und ich frage mich, ob sich zusätzlicher Entwicklungsaufwand und schlechtere Performance auszahlen, nur um ein paar Bytes in der Executable zu sparen. Gibts denn ein konkretes Problem mit der Grösse oder ist das mehr eine idealistische Angelegenheit?



  • Afaik ist DevC++ und die damit ausgelieferte MinGW-Version ziemlich veraltet und erzeugt deswegen so große Dateien. Compile mal mit der Optionen -s und wenn nötig ersetze -O3 durch -O2.



  • Nexus schrieb:

    Du hast mehrere Möglichkeiten, die Binary zu verkleinern: Auf C++-Streams verzichten, Code auf Grösse statt Geschwindigkeit optimieren, so viel wie möglich dynamisch linken.

    Aber du zahlst einen Preis dafür. Und ich frage mich, ob sich zusätzlicher Entwicklungsaufwand und schlechtere Performance auszahlen, nur um ein paar Bytes in der Executable zu sparen. Gibts denn ein konkretes Problem mit der Grösse oder ist das mehr eine idealistische Angelegenheit?

    Es war eher eine idealistische Angelegenheit


Anmelden zum Antworten