Diese verrückten suchen Seite ist bringt ein Argument auf, das ich in der fernen Vergangenheit gehört habe (ob es wahr ist oder noch nicht heute, ich bin mir nicht sicher, moderne Verpacker haben wahrscheinlich heute eine andere Strategie) Dieser Artikel verweist auf Win32! :)
Moderne Multitasking OSes wie Windows 95/98 und NT verwenden, was ein "virtueller Speicher" System bezeichnet. Wenn Programme starten, wird der gesamte Code nicht sofort in den Speicher beim Start geladen, wie es bei DOS Programmen der Fall war. Stattdessen werden nur die Teile des Codes, der aktiv ausgeführt wird, in den Speicher gespeichert. Sagen Sie beispielsweise Ihr Programm verfügt über eine Druckoption in seinem Menü und Code, der das Drucken verarbeitet. Dieser Code wird nur in den Speicher geladen, wenn die Funktion Drucken zuerst vom Benutzer ausgewählt wird. Und wenn, nachdem der Code in Speicher geladen wird die Druckfunktion nicht für eine Weile verwendet wird, wird das System „verwerfen“ den Code, die Freigabe des Speichers es besetzt, wenn eine andere Anwendung dringend Speicher benötigt. Dies ist Teil eines Prozesses namens "Paging" und ist vollständig transparent für das Programm.
Ein anderer Weg Paging unter Win32 spart Speicher ist es mehrere Instanzen eines Programms (oder DLL) zu der gleichen Speicher für Code verursacht.In anderen Worten, unter normalen Umständen gibt es keinen wirklichen Unterschied in der Menge der physischen Speicher für Code zugewiesen zwischen Start 100 Instanzen eines Programms und Starten einer Instanz.
Wenn alle Win32-Programme verhalten mich wie DOS-Programme, alles in Speicher zu laden und dort zu halten, bis das Programm beendet und auch nicht beliebige Speicher zwischen Instanzen mehr teilen, können Sie wahrscheinlich vorstellen, wie schnell physischer Speicher konnte Führen Sie auf Systemen mit einer begrenzten Menge, aus, was das Starten von Datenträgeraustausch verursacht.
Noch dies ist genau das, was aktuelle Win32 EXE-Kompressoren zu Ihrem EXE/DLL's tun! Sie gehen komplett gegen das Paging-System des Betriebssystems durch dekomprimieren aller Code in den Speicher und halten es dort bis zur Beendigung. Und weil der Code nicht in einem "rohen" Format in der EXE-Datei gespeichert ist (d. H. , wie er im Speicher abgelegt ist), kann das Betriebssystem keinen Code zwischen mehreren Instanzen teilen.
Das ist fast ein Duplikat - ich habe einen Link zu der anderen relevanten Frage in [Delphi] hinzugefügt. – mghie