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.
Speicherverbrauch
Re: Speicherverbrauch
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
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?
Re: Speicherverbrauch
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
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
Re: Speicherverbrauch
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
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?