Re: Curses: init_screen vergessen -> Coredump

Andreas Kostyrka <[email protected]> Thu, 6 Feb 2003 23:07:10 +0100
Newsgroups gmane.comp.lang.ruby.german
Message-ID <[email protected]>
Am Montag, 3. Februar 2003 12:06 schrieb clemens fischer:
> nun, und was ist dann die groesse eines programms?  ich wollte
Die "Größe des Programms" ist eine schwierig bestimmbare Größe.
Grundsätzlich haben wir 2 Teile:
-) Text (Code)
-) Daten

Dummerweise kann man die Größe eines Programms nur schwer eruieren, da Linux 
(wie die meisten modernen Systeme) Copy-On-Write und Shared-Libraries. 
Folgerung: Daten (weniger) und Code (mehr) können zwischen verschiedenen 
Prozessen geteilt werden.
Insbesondere haben gerade Shared-Libraries als Folge, daß sehr viel Code 
"theoretisch" dem Programm hinzugeschlagen wird, da der Linker nicht "clever" 
unbenutzte Objekte weglassen kann, die Shared-Library muß für alle 
Anwendungsfälle gut sein. Gleichzeitig verschwendet eine solche Library 
keinen Speicher.

Beispiel:
libQQQ -> 10MB gross.
ProgA -> verwendet nur 512KB Code von libQQQ.
Resultat:
ca. 9.5MB von libQQQ bleiben auf der Platte, Linux holt nur die benötigten 
512KB in den Speicher. (In Wirklichkeit geht Speicher verloren für PageTables 
und Seiten die versehentlich "berührt" werden, aber das ändert nix an meiner 
Aussage)

Wie groß ist jetzt nun diese ProgA? Rechnen wir ProgA 10MB für libQQQ an?
Oder nur 512KB? Und wie eruiren wir den Wert 512KB?

> wissen, welchen einfluss die implementierung der c-lib hat.  das
> programm war nur ein einfacher aufruf einer curses funktion.
Wie gesagt, die Programmgröße ist bereits schwierig zu definieren.
Linux setzt gerade eine Reihe von Techniken zur Speicheroptimierung ein, die 
obwohl sie effektiv Speicher sparen, formal den Speicherverbrauch erhöhen. 
(Shared-Libraries)
Zusätzlich machen z.B. Threads die Feststellung des Speicherverbrauchs 
unpraktikabel.

Die einzige Methode die halbwegszuverlässig funktioniert ist free. Dazu muß 
der Rechner aber idle sein (idealerweise single-user-mode).

Andreas