Kürzlich habe ich die Existenz der "backtrace" Funktion gelernt. Diese Funktion ermöglicht es, unter bestimmten Bedingungen den Aufruf eines ELF-laufenden Programms abzurufen, das ohne Debugging-Informationen kompiliert wurde.Wirkung der Entfernung "statische" Schlüsselwort für die Funktion
Es ist für mich perfekt ist (ich kann nicht das Debuggen Symbol in Produktionsprogramm einfügen), aber für „Backtrace“ zu arbeiten, gibt es (in etwa) zwei Zustand:
- den Linker Sagen Sie zusätzliche Informationen hinzufügen (durch Übergeben der Option -rdynamic).
- Konvertieren Sie alle "statische" Funktion in "nicht statische" Funktion.
Meine Sorgen ist, dass, wenn ich diese zwei Bedingung erfüllt, wird mein Programm langsamer sein (weil Compiler nicht nicht-statische Funktion optimieren kann, wie er statische Funktion optimieren?). Soweit ich weiß, hat das Hinzufügen zusätzlicher Informationen mit -rdynamic keinen Einfluss auf die Programmleistung: Es fügt der ELF-Binärdatei nur ein wenig Gewicht hinzu.
Also hier ist meine Frage:
Was ist der Effekt in der Bezeichnung der Leistung ausgeführt wird, wenn alle statische Funktion nicht-statische Funktion werden?
'statisch' betrifft nur scope/visiblity, nein? – ThingyWotsit
Ich habe vergessen, es aufzuschreiben, aber soweit ich weiß, ja, statische Auswirkungen Umfang/Sichtbarkeit. Wo mein Zweifel beginnt ist, wenn 'statisch' NUR Einfluss auf Umfang/Sichtbarkeit hat. Jemand, den ich kenne, könnte die Compiler-Optimierung ebenfalls beeinflussen, aber er kann nicht bestätigen, was er mit der Quelle sagt, und er ist sich auch nicht wirklich sicher. Wenn es zur Kompilierungszeit eine Ausfallzeit gibt, weil der Kompilierer zusätzliche Schritte berechnen muss, um die gleiche Optimierung durchzuführen, stört es mich nicht. Aber wenn es eine Ausfallzeit zur Laufzeit gibt, lohnt es sich darüber nachzudenken. –
Handelt es sich um C oder C++? Möglicherweise verwandt: http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program Wenn ich mich nicht irre, kann "statisch" in C nur für Variablen verwendet werden, nicht für Funktionen ; Was meinst du mit _statc_funktion? – Codor