DOS EXE Dateigröße

OP #5369556
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 :-)
Gast #5369677
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.
Gast #5369845
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
Gast #5370373
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.
Gast #5370679
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...
Gast #5370682
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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren