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