Forum: PC-Programmierung DOS EXE Dateigröße


von Philipp S. (nokia9300i)


Lesenswert?

Hallo!

Hab unter MS-DOS 6.22 per QBasic mehrere Programme geschrieben, und dann 
mit QuickBasic 4.5 kompiliert. Nun ist mir aufgefallen, dass die ersten 
zwei Programme, welche ziemlich kurz sind größer sind, als das dritte, 
das wesentlich länger ist... woran kann das liegen? Die .BAS Datei vom 
dritten Programm ist schon größer, als die von ersten zwei Programmen, 
aber bei den .EXE Dateien sind die kleineren Programme kleiner???

Danke :-)

: Verschoben durch User
von jemand (Gast)


Lesenswert?

da du die programme nicht gepostet hast:

peep *peeep* peeeep Kein Anschluß unter dieser Glaskugel

von Alex W. (Gast)


Lesenswert?

Poste mal die Quellcodes!

von Philipp S. (nokia9300i)


Angehängte Dateien:

Lesenswert?

Hab leider nur von einem der ersten zwei Programme die .BAS Datei 
gefunden...

Bitte nicht blöd lachen, das sind wirklich nur ganz einfache Sachen, 
denn ich wollt mich halt mal dran versuchen...

:-)

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Ganz einfach: in einem Programm gibt es nur String- und 
Integerverarbeitung; im anderen muss per Floatingpoint berechnet werden.

Der gleiche Effekt findet sich bei jedem Compiler, auch bei 
Mikrocontrollern.

von Alex W. (Gast)


Lesenswert?

Die Mathematikroutibe ist im Quiz nicht benötigt und somit auch in der 
EXE nicht drinn

von c.m. (Gast)


Lesenswert?

in anlehnung an die vorigen antworten:
die DOS_QUIZ.BAS .exe wird wahrscheinlich größer sobald du ein printf 
benutzt (soweit "bas" das unterstützt).

anscheinend ist es so, dass externe libs mit eingebunden werden sobald 
du eine funktion aus dieser lib verwendest - sqr() zum beispiel.
bei anderen sprachen wird das offensichtlicher, weil man die 
einzubindenden libs im quellcode angeben muss, z.b. über "include", 
"use", "import" - je nach sprache.

von georg (Gast)


Lesenswert?

c.m. schrieb:
> bei anderen sprachen wird das offensichtlicher, weil man die
> einzubindenden libs im quellcode angeben muss

Da gibt es riesige Unterschiede - manche Compiler binden der Einfachheit 
halber alles dazu was es überhaupt gibt, egal ob verwendet oder nicht, 
so dass ein "Hallo Welt" schon MB gross sein kann - oft in Foren 
besprochen. Andere arbeiten paketweise, also math wird gelinkt wenn 
irgendeine mathematische Funktion vorkommt. Besonders gute Compiler 
arbeiten da auf Funktionsebene, also sin wird gelinkt wenn verwendet 
aber cos und tan usw. nicht. Naturgemäss erzeugen die den 
kleinstmöglichen Code, ist aber auch der grösste Aufwand.

Wenn unbedingt nötig kann man das auch selber machen, indem man die 
Object-Dateien editiert - ich habe selbst schon aus Libraries solange 
Funktionen entfernt bis der Linker gemeckert hat. Auf die Arbeit kann 
ich aber auch gern verzichten, besonders in Zeiten wo sich Speicher nach 
GByte statt kByte bemessen.

Georg

von Manfred (Gast)


Lesenswert?

Philipp S. schrieb:
> mit QuickBasic 4.5 kompiliert.

Ich bin mir nicht sicher, ob QB wirklich ein Compiler ist, glaube eher, 
der schleppt einen Interpreter in die .exe.

Ein echter Compiler war Microsoft-Power Development System "PDS", mit 
dem habe ich vor vielen Jahren gespielt.

von Me (Gast)


Lesenswert?

Manfred schrieb:
> Ich bin mir nicht sicher, ob QB wirklich ein Compiler ist, glaube eher,
> der schleppt einen Interpreter in die .exe.

Und der Interpreter ist nur 2kb groß?

von Bernd K. (prof7bit)


Lesenswert?

Me schrieb:
> Und der Interpreter ist nur 2kb groß?

Damals als Programmierer noch richtige Programmierer waren und so 
weiter... da ging das schon. Ob aber Microsoft das jemals geschafft hat 
ist leider nicht überliefert.

von Flauschi (Gast)


Lesenswert?

Manfred schrieb:
> Ich bin mir nicht sicher, ob QB wirklich ein Compiler ist, glaube eher,
> der schleppt einen Interpreter in die .exe.

QBasic: Interpreter (extern)
qbasic /run bla.bas

QuickBasic: Compiler

von oszi40 (Gast)


Lesenswert?

Philipp S. schrieb:
> mit QuickBasic 4.5 kompiliert

Sobald Dein anderer Befehl hinzukommt, muß der Compiler auch das nötige 
Programm mitliefern. So könnten z.B. aus einer Zeile A=7 als .bas 12k 
Programm.exe werden. Je nach benutzten Compiler-Optionen kann die Größe 
auch noch verschieden sein.

von Analogmichan (Gast)


Lesenswert?

Philipp S. schrieb:
> welche ziemlich kurz sind größer sind, als das dritte,
> das wesentlich länger ist... woran kann das liegen?

Im kurzen Programm PYTH.BAS verwendest Du eine Quadratwurzel, hinter 
dieser verbirgt sich ein relativ großer Code. Dieser kann in C so 
ausehen:
1
 if( a < 0. )
2
    {
3
        printf("\n\nFehler: Radikand ist negativ\n");
4
        return 0;
5
    }
6
7
    /* falls Radikand gueltig */
8
9
    for(x_alt = a; fabs( x_neu - sqrt(a) ) >= 1e-2; x_alt == x_neu)
10
        x_neu = 0.5*(x_alt + a/x_alt);
11
   
12
    printf("\nWurzel %f = %f\n", a, x_neu);
(schnippsel von hier: 
http://www.informatikerboard.de/board/archive/1496/thread.html)

Der Quadratwurze-Code widerum verwendet eine Division, welche den 
Maschinencode zusätzlich aufbläht.

Im anderen Programm wird der Compiler (außer Print) nur IF-Anfragen 
übersetzen und die realisieren sich aus Vergleichen und relativen 
Sprüngen.

Deshalb hat das kleinere Basic-Program PYTH.BAS einen größeren 
Maschinencode als das längere Programm QUIZ.BAS

Alles sehr grob gesagt...

von Analogmichan (Gast)


Lesenswert?

Mist. Ich habe Dir einen Fehlerhaften Code für die Division verlinkt.
Habe nur kurz darauf geschaut, als ich nach dem Heron-Verfahren gesucht 
habe.

Sorry.

Der hier sollte stimmen:
1
double heronverfahren(double a) {
2
3
double xn = 1.0;
4
5
do {
6
xn = (xn + (a / xn)) / 2;
7
}
8
while (((xn * xn) - a) > 0.0001);
9
return xn;
10
}

link von hier:
https://www.drwho.de/forum/index.php/Thread/2958-So-rechnet-der-Computer-die-Wurzel-aus/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.