/OPT (Optimierungen)

Aktualisiert: November 2007

Steuert die Optimierungen, die während eines Builds von LINK ausgeführt werden.


/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
/OPT:{WIN98 | NOWIN98}

REF | NOREF

Mit /OPT:REF werden Funktionen und Daten entfernt, auf die nicht verwiesen wird, während diese Funktionen und Daten mit /OPT:NOREF beibehalten werden.

Standardmäßig entfernt LINK nicht referenzierte Paketfunktionen. Ein Objekt enthält Paketfunktionen (COMDATs), wenn es mit der Option /Gy kompiliert worden ist. Diese Optimierung wird transitive COMDAT-Eliminierung genannt. Geben Sie /OPT:NOREF an, um diese Standardeinstellung zu überschreiben und COMDATs ohne Verweise im Programm zu behalten. Sie können die Option /INCLUDE verwenden, um das Entfernen eines bestimmten Symbols zu überschreiben.

Bei Angabe von /DEBUG ist die Standardeinstellung für /OPTNOREF (andernfalls ist sie REF), und alle Funktionen werden im Abbild beibehalten. Um diese Standardeinstellung zu überschreiben und ein Debugbuild zu optimieren, geben Sie /OPT:REF an. Mit der /OPT:REF-Option wird inkrementelles Verknüpfen deaktiviert.

COMDAT-Daten müssen mithilfe von __declspec(selectany) ausdrücklich als solche gekennzeichnet werden.

Bei Angabe von /OPT:REF ist /OPT:ICF standardmäßig aktiviert. Wenn Sie /OPT:REF, nicht jedoch /OPT:ICF festlegen möchten, geben Sie Folgendes an:

link /opt:ref /opt:noicf

Durch Angabe von /OPT:ICF wird die /OPT:REF-Option nicht aktiviert.

ICF[= iterations] | NOICF

Verwenden Sie /OPT:ICF[=iterations], um eine identische COMDAT-Faltung auszuführen. Redundante COMDATs können aus der Linkerausgabe entfernt werden. iterations geben an, wie oft Symbole nach Duplikaten durchsucht werden. Die Anzahl der Iterationen beträgt standardmäßig 2. Zusätzliche Iterationen können mehr Duplikate auffinden, die bei der Faltung in vorherigen Iterationen unentdeckt blieben.

Beachten Sie, dass sich bei standardmäßiger Aktivierung von ICF mit expliziter Angabe von /OPT:REF der Linker anders verhält als bei expliziter Angabe von /OPT:REF,ICF. Bei der Standardeinstellung von ICF mit /OPT:REF werden schreibgeschützte Daten nicht gefaltet. Dies gilt auch für .rdata, .pdata und .xdata. Die Standardeinstellung ICF mit /OPT:REF führt jedoch dazu, dass beim Erstellen von Abbildern für Itanium und x64 eine geringere Funktionsfaltung auftritt, da Funktionen in diesen Modulen eine größere Abhängigkeit von schreibgeschützten Daten wie .pdata und .xdata aufweisen. Um ICF vollständig zu verwenden, geben Sie explizit /OPT:ICF an.

Funktionen werden mit der Compileroption /Gy in COMDATs abgelegt, und const-Daten werden in COMDATs abgelegt. Ein Beispiel zur Angabe von Daten zur Faltung finden Sie unter Selectany.

ICF ist standardmäßig aktiviert, wenn REF aktiviert ist und in einem Debugbuild explizit aktiviert werden muss. NOICF kann angegeben werden, wenn REF angegeben wurde.

bxwfs976.alert_note(de-de,VS.90).gifHinweis:

/OPT:ICF kann dazu führen, dass dieselbe Adresse verschiedenen Funktionen oder schreibgeschützten Datenmembern (mit /Gy kompilierten const-Variablen) zugewiesen wird. Deshalb kann /OPT:ICF ein Programm unterbrechen, bei dem die Adressen von Funktionen oder schreibgeschützten Datenmembern verschieden sein müssen. Weitere Informationen finden Sie unter /Gy (Funktionslevel-Linking aktivieren).

WIN98 | NOWIN98

WIN98 und NOWIN98 steuern die Ausrichtung der Abschnitte im endgültigen Abbild. Bei Windows 98-Anwendungen ist es optimal, Abschnitte an einer 4-K-Grenze auszurichten, um die Ladezeit zu verkürzen. (Dadurch ist es dem Windows 98-Speicher-Manager möglich, ausführbare Abbilder bei optimaler Speicherausnutzung zwischenzuspeichern.) Diese Option ist im Linker standardmäßig aktiviert, sodass Sie /OPT:NOWIN98 angeben müssen, um eine reduzierte (jedoch unter Windows 98 langsamere) Version der Anwendung zu erhalten.

WIN98 ist standardmäßig aktiviert. In folgenden Fällen ist WIN98 nicht aktiviert:

  • Bei Verwendung von /ALIGN.

  • Bei einer von x86 abweichenden /MACHINE-Zieladresse.

  • Wenn mit /SUBSYSTEM weder WINDOWS noch CONSOLE festgelegt wird.

/OPT:WIN98 ist standardmäßig für Abbilder deaktiviert, die dadurch einen Datenzuwachs von mehr als 25 % (entsprechend der unten angegebenen Gleichung für den durchschnittlichen Zuwachs) erfahren würden. Anders ausgedrückt würde /OPT:WIN98 bei kleineren Abbildern nicht aktiviert. Um sicherzustellen, dass diese Einstellung keine Auswirkung hat, sollten Sie /OPT:WIN98 explizit aktivieren. Geben Sie /OPT:NOWIN98 an, um eine kleinere (aber auf Windows 98 langsamere) Version der Anwendung zu erstellen.

Diese Leistungsverbesserungen in Windows 98 sind nur dann wirksam, wenn die Abschnitte in portablen ausführbaren Abbildern an einer Seitenbegrenzung beginnen. Die /OPT:WIN98-Option führt die notwendige Dateiausrichtung aus.

Beim Erstellen von Komponenten, die nur unter Windows NT oder Windows 2000 ausführbar sind, sollten Sie die Option /OPT:NOWIN98 verwenden.

Diese Änderung wirkt sich jedoch nicht auf den Ladevorgang von Abbildern oder den Workingset des Prozesses aus. Nur die Größe des Datenträgers wird geändert.

Die folgenden Hinweise helfen Ihnen bei der Berechnung des durchschnittlichen Abbilddatenzuwachses bei Verwendung der Option /OPT:WIN98:

  • Die durchschnittliche überflüssige Speichermenge für eine Dateianordnung mit 4096 Bytes lässt sich wie folgt charakterisieren: Anzahl-der-Abschnitte-im-Abbild * 4096/2

  • Die durchschnittliche überflüssige Speichermenge für eine Dateianordnung mit 512 Bytes lautet: Anzahl-der-Abschnitte-im-Abbild * 512/2

Der Zuwachs wird somit wie folgt ermittelt:

  • Anzahl-der-Zuwachs-Bytes = Anzahl-der-Abschnitte-im-Abbild * (4096/2 – 512/2)

    oder in vereinfachter Form:

    Anzahl-der-Zuwachs-Bytes = Anzahl-der-Abschnitte-im-Abbild * 1792

    Dabei wird jedoch nicht berücksichtigt, dass der Abbildheader in die Abschnittsausrichtung eingefügt werden muss. Da der Abbildheader immer 512 Bytes oder weniger umfasst, beträgt der zusätzliche Zuwachs stets 4096 – 512 oder 3584.

  • Durchschnittliche Anzahl-der-Zuwachs-Bytes = Anzahl-der-Abschnitte-im-Abbild * 1792 + 3584

  • Maximale Anzahl-der-Zuwachs-Bytes = Anzahl-der-Abschnitte-im-Abbild * (4096 - 512 + 3584)

Verwenden Sie das Tool DUMPBIN für eine ausführbare Datei, um die Anzahl der Abschnitte zu bestimmen. In der Übersicht finden Sie eine Liste der Abschnitte im Abbild. In der Regel werden dem ermittelten Wert 3 bis 5 weitere Abschnitte hinzugefügt.

/OPT:WIN98 sollte nur dann nicht verwendet werden, wenn das portable ausführbare Bild sehr klein ist. Selbst bei für Downloads vorgesehenen Bildern wird der überflüssige Speicherplatz mit Nullen aufgefüllt und lässt sich gut komprimieren.

Optimierungen verkleinern im Allgemeinen die Abbildgröße und beschleunigen die Programmausführung, allerdings auf Kosten einer längeren Verknüpfungsdauer.

Verwenden Sie die /VERBOSE-Option, um die durch /OPT:REF entfernten Funktionen und die durch /OPT:ICF gefalteten Funktionen anzuzeigen.

So legen Sie diese Linkeroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Ausführliche Informationen finden Sie unter Festlegen von Visual C++-Projekteigenschaften.

  2. Klicken Sie auf den Ordner Linker.

  3. Klicken Sie auf die Eigenschaftenseite Optimierung.

  4. Ändern Sie eine der folgenden Eigenschaften:

    • COMDAT-Faltung aktivieren

    • Für Windows 98 optimieren

    • Verweise

So legen Sie diese Linkeroption programmgesteuert fest

Community-Beiträge

Anzeigen: