Speicherverbrauch

Post Reply
Message
Author
Aldente

Speicherverbrauch

#1 Post by Aldente »

Hi all!

Ich habe eine Frage zu UPX (http://wildsau.idv.uni-linz.ac.at/mfx/upx.html):
Wenn man mit dem GPL-Programm UPX ausfuehrbare i386-Linux-Programme komprimiert (die man evtl. mit "strip" schon vorher verkleinert hat), dann bleiben sie trotzdem noch ausfuehrbar, obwohl sie einen Bruchteil vom vorherigen Platz einnehmen.
Weiss zufaellig einer, ob dadurch der Speicherverbrauch beim Ausfuehren voruebergehend erhoeht wird?
Laut der Seite sollen die komprimierten Programme sogar schneller laufen, als die _nicht-komprimirrten_ Programme. Das kann ich jedoch ueberhauptnicht verstehen.

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Speicherverbrauch

#2 Post by hjb »

Hi,

ich kenne zwar UPX nicht im Detail, aber das folgende dürfte klar sein.

Bevor ein Programm ausgeführt werden kann, muß es vollständig entpackt werden, und zwar in eine temporäre Datei. Der Kernel kann nichts anderes ausführen.

Also müßte sich in aller Regel der Programmstart verlangsamen. Beim Entpacken wird auch Speicher benötigt, je nach verwendetem Algorithmus mehr oder weniger. Doch das dürfte vernachlässigbar sein.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Speicherverbrauch

#3 Post by bakunin »

Guten Abend!

Ich nehme an, dass nicht in eine Datei, sondern direkt in den Speicher entpackt wird. Wenn ein Programm ungepackt sehr groß wäre, dann kann es sein, dass sich die Ladezeit verringert, da weniger Daten von der Platte geladen werden müssen...

Warum sie schneller laufen sollten ist mir nicht ganz klar, höchstens schneller starten und im Regelfall wohl nicht mal das.

Cheers,
Wolfgang

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Speicherverbrauch

#4 Post by hjb »

Hi Wolfgang,

wie sollte UPX es bewerkstelligen, das Programm aus dem Speicher heraus zu starten? Soweit mir bekannt, ist das nur mit dem Systemcall exec() möglich, und der verlangt eine Datei.

Oder geht es doch anders? Der entpackte Programmcode könnte auch mit mmap() eingebunden werden. Da gibt es auch ein Flag, daß dieser Code ausführbar sein soll. Genau so werden auch DLLs eingebunden. Aber irgendwie kann ich mir das nicht so recht vorstellen. Die Details dieses Vorgehens dürften recht kompliziert sein, damit das entpackte Programm nicht merkt, daß es von UPX aufgerufen wurde.

Verwendung von komprimierten Dateien/Partitionen war schon immer mit einem gewissen Performance-Verlust verbunden. Lediglich unter bestimmten Umständen, vielleicht wenn die Festplatte sehr langsam ist, kann man diesen wettmachen.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Post Reply