Ich möchte die Stack-Trace erhalten, wenn die Anwendung abstürzt. Ich verstehe, dass die Option -rdynamic es ermöglicht, den vollständigen Stack-Trace mit den Funktionsnamen zu erhalten. Aber ich bin besorgt, ob es Auswirkungen auf die Leistung meiner Bewerbung haben wird.Wird die Option -rdynamic Linker der Leistung von gcc/g ++ hinzugefügt?
Antwort
Ja, gibt es, obwohl es sehr spezifisch ist und normalerweise kein Grund zur Sorge.
Die Option -rdynamic weist den Linker an, den Symboltabellen Symbole hinzuzufügen, die zur Laufzeit normalerweise nicht benötigt werden. Dies bedeutet, dass es mehr, möglicherweise viele weitere Symbole gibt, die der dynamische Linker zur Laufzeit zur Symbolauflösung durchstreichen muss.
Insbesondere, da Symboltabellen-Lookups in GNU-basierten Systemen mit einem Hash implementiert werden, erhöht die Verwendung von mehr Symbolen die Wahrscheinlichkeit, dass es Hash-Kollisionen geben würde. Da alle Symols, die in der Hash-Tabelle kollidieren, in einer Liste sitzen, muss der Runtime-Linker die Liste durchqueren und unter Verwendung von memcmp jeden Symbolnamen vergleichen. Wenn mehr Symbole in der Hash-Bedeutung kollidieren, was längere Listen bedeutet, wird es mehr Zeit benötigen, jedes dynamische Symbol aufzulösen.
Diese Situation ist etwas schlechter für C++ und C, mit der Vielzahl von Namen mit dem gleichen Präfix aufgrund von Klassennamen.
In der Praxis wirkt sich dies nur auf das allererste Mal aus, dass ein Symbol verwendet wird. Wenn Ihre Anwendung nicht sehr groß ist und viele Symbole enthält, wird dies nicht wahrgenommen.
In dem seltenen Fall, dass Ihre Anwendung so groß ist, können Tricks wie prelinking verwendet werden, um den Overhead zu überwinden.
- 1. Auswirkung/Nachteile von rdynamic gcc Option
- 2. ld linker Frage: die --whole-Archiv-Option
- 3. Was genau macht `-rdynamic` und wann genau wird es benötigt?
- 4. -rdynamic nur für ausgewählte Symbole?
- 5. backtrace_symbols() mit beiden -static und -rdynamic
- 6. Xcode Linker Verzeichnis nicht gefunden für Option
- 7. Ändern der Mausposition, wenn die Viewbox hinzugefügt wird
- 8. Auswahllistenfehler, wenn hinzugefügt, entfernt und erneut eine Option hinzugefügt
- 9. NDK 11 Linker wird die Behandlung von Warnungen als Fehler
- 10. Wie wird der Wert geändert, wenn die Option geändert wird?
- 11. Wird die Firebird-Leistung durch die Verwendung von "Festhalten" beeinträchtigt?
- 12. Wie wird die Zertifikatskette zum Keystore hinzugefügt?
- 13. in yii2 select2, wie Wert in der Datenbank hinzugefügt wird, wenn diese Option nicht existiert
- 14. Linker-Option, um nicht verwendete Abhängigkeiten zu ignorieren
- 15. Option der CSS-Klasse entfernt wird, wenn Option ausgewählt ist
- 16. Wird der richtige Wert eines Arrays die Leistung verbessern?
- 17. Warum wird der URL ein # -Zeichen hinzugefügt?
- 18. Gibt es eine Entsprechung zur GNU-Linker-Option "--just-symbols" für Nicht-GNU-Linker?
- 19. Die ausgewählte Option dynamisch aktualisieren, wenn der Filter angewendet wird?
- 20. Wie man die Option basierend auf der Sammeleigenschaft ausgewählt wird
- 21. Ändern der Auswahltaste, wenn die Option geändert wird
- 22. Netsuite-Rechnungsposten Artikel, der nicht hinzugefügt wird
- 23. Verbessern Sie die Leistung von WebView (sollte die gleiche Leistung wie der native Webbrowser haben)
- 24. Apple-Mach-O Linker Warnung „Verzeichnis nicht für Option gefunden ...“
- 25. Warum wird der Wert des Datums nicht zur Datenbank hinzugefügt?
- 26. Fremdschlüssel wird nicht hinzugefügt
- 27. Apple Mach-O-Linker Warnung wird nicht weggehen
- 28. Text von jQuery hinzugefügt wird nicht angezeigt
- 29. Verbessern der Leistung von Numpy
- 30. wählen Sie die Option nach der Option Länge