mikrocontroller.net

Forum: PC-Programmierung Zu großes Programm in C++


Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein Problem mit der größe des Programms was mir dieser Code 
erzeugt es hat satte 250kB.
#include <iostream>
int main()
{
  std::cout << "Ihre Festplatte wurde formatiert bitte heben Sie einen 
Magnet an ihre Festplatte um es rueckgaengig zu machen!\noder druecke 
Enter um die 2te moeglickeit zu erfahren!"<<std::endl;
  std::cin.get();
  std::cout << "lass dich nicht vergaeiern"<<std::endl;
  std::cin.get();
}

das ist doch nicht normal.... . Als IDE verwende ich Code::Blocks. Das 
Makefile habe ich im Anhang.
Was mache ich falsch?
MFG
Peter

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dir 250kB zu groß ist, mußt du weniger komplexe Programme 
schreiben. Oder hast du mal zu Microsoft gesagt "Ich habe ein Problem 
mit der Größe von Windows, schicken Sie es mir bitte auf einer Floppy 
disc"?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
warum bekommen des dann andere mit 8kB hin?
mfg
peter

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frag mal Theo, der kennt sich aus.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das muss so groß sein. Der Compiler erkennt Schadsoftware und bläht das 
executable mit unnötigen, statisch gelinkten Bibliotheken auf. Dein 
erstes, echt gefährliches Programm dürfte auf 50 - 60 Mib kommen...

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du mußt die standardbibliotheken rausnehmen

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> warum bekommen des dann andere mit 8kB hin?

Weil die wissen, was sie tun. Unter anderem lassen sie wahrscheinlich 
keine Debuginformationen im Programm und linken alles dynamisch.

Autor: Marek Swierzy (marekswierzy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

versuch dieses Programm doch mal bitte in C-Syntax mit Printf und getch 
zu schreiben.

du brauchst die header-dateien  stdio und conio.

Poste dann mal bitte die größe des files.

Gruß

Marek

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
@Bartli kannst du das mal genauer erläutern wie ich die debuginfos mit 
Codeblock rausbekomme? BUILD = relase geht irgenwie net oder ich trage 
es falsch ein. Kann mir jemand sagen wo ich des eintragen kann bei 
CODE.Blocks? Und Dymnamisches Linken ist für mich noch ein Fremdwort 
werde mich heute abend mal schlau machen. Weiß auch hier jemand wie das 
über Code:Blocks geht?
@marek:
das werde ich heute abend mal versuchen.
mfg
peter

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht indem Du unter

"Project, Build Options, Compiler, Compiler Flags" den Haken bei 
"Produce debugging symbols [-g]"

wegnimmst?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
danke für den tip aber des ist schon weg.
mfg
peter

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm..
ich als cmd-fan (antimausschubsli) würde gir ein gcc-strip <prog> 
verschreiben ;-)
wie das in codeblock aussieht bzw wo welcher häckchen zu setzten ist.. 
keine ahnung

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
@marek ich habe es mal mit Printf probiert ohne irgendwelchen anderen 
balast probiert. Die von dir angegebenen Libs wurden leichter nicht 
gefunden. mit der Standertlib iostream hat es dann gefunzt allerdings 
auch 250k.
@KoF kannst du bitte mal so ein scribt posten um evt auszuschließen das 
es irgenwie am Windoof liegt. Vieleicht schaffe ich es ja mit der IDE zu 
verheiraten.
danke schonmal für eure bemühungen.
MFG
Peter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe dein Problem nicht. Hat dein PC nur 200k Festplatte frei?

Autor: hui bui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch doch ne andere Programmiersprache, z.B. C oder pureBasic - ich 
versteh nicht, warum Du Dich auf C++ versteifst?! Weil da jeder mit 
rumprogrammiert oder berufliche Vorgabe?
Jeder Sprache hat Ihren Sinn - und wenn man herumdoktoren muß, sollte 
man mal über andere Wege nachdenken

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter, sieh's einfach positiv:

Wenn du deinem Programm weitere zwei solche Aus- und Eingaben 
hinzufügst, wird es sich um vielleicht 200 Byte vergrößern, also 
doppelte Funktion bei weniger als 1 Promille mehr Code.

Wenn ich dein Programm compiliere und vier Zeilen hinzufüge, verdoppelt 
sich die Größe des Programms fast. Da kommst du doch eindeutig besser 
bei weg.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
@hui bui Ich denke einfach das C++ vieleicht nicht einfach zu lernen ist 
aber es durchaus eine breite Community und freie Compiler gibt. Und für 
mich ist die ünterstüzung einer Programiersprache schon wichtig. Ich 
denke mal jede Programmiersprache hat ihre Vor- und auch Nachteile. Ich 
habe vor µC mit C geproggt und ich wollte mir mal eine Objektorientierte 
Sprachw anschauen und zudem arbeiten wir damit auch in der Schule oder 
sollten es zumindestens... (Über das zusammenklicken von Fenstern kamen 
wir in einen halben Jahr noch nicht ( auch keine Grundlagen ich weiß das 
man sowas net in nen 1/2 Jahr lernt) .
@Rolf Magnus
Bis jetzt soll ist es noch kein Problem aber was wenn die Programme mal 
etwas größer werden? brauche ich dann die ganze Festplatte(160GB) für 
ein Prog?
@Gast
wie meinst du es wenn du es bei dir Compilerst? meinst du das ganze 
relativiert sich mit der größe des Programms? Sprich wenn ich mal 1k 
Zeilen habe habe ich vieleicht nur 300k? Wenn dies jemand bestätigen 
könnte wäre das ja noch in Ordnung.... .
MFG
Peter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bis jetzt soll ist es noch kein Problem aber was wenn die Programme mal
> etwas größer werden?

In dieser Datei ist vermutlich ein gewisser Overhead drin, der nicht 
oder kaum von der Größe deines eigentlichen Code abhängt. Viele Anfänger 
machen den Fehler, ein kleines, in der Praxis eigentlich nutzloses 
Programm zu schreiben und von diesem auf richtige Programme zu 
schließen. Das funktioniert so aber nicht. Du solltest dir deshalb 
erstmal keine Sorgen wegen der Größe der ausführbaren Datei machen.
Übrigens: Ich nehme an, daß das Programm statisch gelinkt und deshalb so 
groß ist.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bis jetzt soll ist es noch kein Problem aber was wenn die Programme mal
> etwas größer werden? brauche ich dann die ganze Festplatte(160GB) für
> ein Prog?

Da mach dir mal nicht ins Höschen. Die Größe der ausführbaren Datei geht 
alles andere als linear mit der Anzahl der Quelltextzeilen. Guck dir mal 
komplexe Programme an, Officelösungen oder DTP oder so. Die ausführbaren 
Dateien liegen da vielleicht im zweistelligen MB-Bereich, zuzüglich DLLs 
etc. kommt man da auf nur wenige GB. Das sind aber auch Projekte mit 
Millionen Zeilen Quelltext und zigtausenden Mannstunden.

Worauf die meisten mir ihren Posts hier schon hinauswollten ist die 
Tatsache, dass die gelinkten Bibliotheken, wie z. B. iostream, Platz 
verbrauchen, dann aber nicht jeder Aufruf wieder enormen Speicher 
kostet.

Autor: Thorsten Eggert (eggert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich denke das dieser Overhead von der C++ Laufzeitumgebung kommt. Die 
wird bei C++ binaries soweit ich weiss immer hinzugelinkt. Allerdings 
ist dieser Overhead vermutlich bei jedem Programm gleich, unabhangig von 
der Größe des Programms, also bei deinem Compiler vermutlich ca. 250kb, 
wenn ich deinen reichhaltigen eigenen Code mal ignoriren darf (-:.

Gruß

          Thorsten

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich denke das dieser Overhead von der C++ Laufzeitumgebung kommt. Die
> wird bei C++ binaries soweit ich weiss immer hinzugelinkt.

Zumindest beim MinGW kann man unter Umstaenden tatsaechlich nicht viel 
machen.

Weitere Vorschlaege:
1. Ausprobieren, was Marek geschrieben hat
2. Assembler nehmen, DOS Programm mit gewuenschter Funktionalitaet 
schreiben (COM, nicht EXE, EXEs haben einen Header, und der ist 
mindestens 32 Bytes gross, und die meisten Linker machen ihn sowieso nur 
512 Bytes oder groesser).

Autor: Marek Swierzy (marekswierzy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
da bin ich wieder.
Also ich habe dass Programm mit dem BCB 6.0 mal compiliert.
Ich komme auf 10,5 KB Größe.

Ob dies(250 KB) normal ist für deinen Compiler oder nicht, kann ich 
nicht sagen.
Ich würde den Compiler nicht aus diesem Grund wechseln.

Gruß

Marek

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.