Also arbeite ich an einem "schnell und schmutzig" Profiler für Firmware - ich muss nur wissen, wie lange einige Funktionen dauern. Lediglich das Drucken der Zeit, die es jedes Mal braucht, wird die Ergebnisse verfälschen, da die Protokollierung teuer ist. Daher speichere ich eine Menge Ergebnisse in einem Array und decke das nach einiger Zeit ab.Zugriff auf eine statische Variable einer Kompilationseinheit direkt von anderen, in C
Bei der Arbeit in einer Kompilierungseinheit (eine Quelldatei) hatte ich nur eine Reihe von statischen Arrays, die die Ergebnisse speichern. Jetzt muss ich das über mehrere Dateien machen. Ich könnte den Code "kopieren", aber das wäre nur hässlich (Bär mit mir). Wenn ich Timing-Code in eine separate Kompilierungseinheit einfüge, statische Variablen erzeuge und Accessor-Funktionen in der Header-Datei anbiete, werde ich jedes Mal, wenn ich auf diese statischen Variablen zugreifen möchte, den Overhead von Funktionsaufrufen übernehmen müssen.
Ist es möglich, direkt auf statische Variablen einer Übersetzungseinheit zuzugreifen?
Ich habe immer versucht, Daten zu kapseln, und nicht globale Variablen verwenden, aber diese Situation erfordert es einfach wegen der Geschwindigkeit Bedenken.
Ich hoffe, das macht Sinn! Vielen Dank!
BEARBEITEN: In Ordnung, so scheint es, was ich fragen ist unmöglich - jemand von Ihnen sehen Alternativen, die im Wesentlichen erlauben mir direkt auf Daten einer anderen Kompilierungseinheit zugreifen?
EDIT2: Vielen Dank für die Antworten Pablo und Jonathan. Ich akzeptierte schließlich Pablos, weil ich keinen klaren Platz hatte, um den Zeiger auf die statischen Daten (nach Jonathan) in meiner Situation zu bekommen. Danke noch einmal!
Re: * Ich habe immer versucht, Daten zu kapseln, und keine globalen Variablen verwenden * Es gibt keine absoluten Regeln in der Programmierung. Für diesen speziellen Zweck würde ich sagen, dass es in Ordnung ist, eine globale Variable gemäß PAblos Antwort zu haben. – JeremyP
Warum stellen Sie es nicht einfach mit einer Funktion aus? Das letzte Mal, als ich nachgesehen habe, waren wir im 21. Jahrhundert und Anrufe zu tätigen war nicht teuer. Bist du noch in den 1950ern? –
@David Vielleicht blase ich das alles überproportional, aber ich teste gerade einen sehr zeitsensiblen Bereich der Firmware (kein PC, dies ist in einer Embedded-Umgebung), also zählt leider jede Uhr. –