Wo speichert der Compiler Standardargumentwerte in C ++? globaler Heap, Stack oder Datensegment?
Danke Jack
Sie sind nicht unbedingt irgendwo gespeichert. Im einfachsten Fall kompiliert der Compiler einen Funktionsaufruf genau so, als wären die fehlenden Argumente vorhanden.
Zum Beispiel
%Vor% Die beiden Aufrufe von f()
werden wahrscheinlich zu genau demselben Assemblercode kompiliert. Sie können dies überprüfen, indem Sie Ihren Compiler auffordern, eine Assembly-Liste für den Objektcode zu erstellen.
Mein Compiler generiert:
%Vor%Wie Sie sehen, ist der generierte Code identisch.
Tags und Links c++
Als Diagnose möchte ich die Anzahl der Zyklen pro Sekunde in meiner App anzeigen. (Denken Sie pro Sekunde in einem Ego-Shooter.)
Aber ich möchte nicht den neuesten Wert oder den Durchschnitt seit dem Start anzeigen. Was ich berechnen möchte, ist der Mittelwert der letzten X-Werte.
Meine Frage ist vermutlich die beste Möglichkeit, diese Werte zu speichern. Mein erster Gedanke war, ein Array fester Größe zu erstellen, so dass jeder neue Wert den ältesten ersetzen würde. Ist das der beste Weg? Wenn ja, wie würde ich es umsetzen?
BEARBEITEN: Hier ist die Klasse, die ich geschrieben habe: RRQueue . Es erbt die Warteschlange, erzwingt jedoch die Kapazität und entfernt bei Bedarf die Warteschlange.
EDIT 2: Pastebin ist so passé. Jetzt auf einem GitHub-Repo .
Vielleicht einen Filter verwenden:
Durchschnitt = 0,9 * Durchschnitt + 0,1 * Wert wo "Wert" die letzte Messung ist
Variiere mit 0,9 und 0,1 (solange die Summe dieser beiden 1 ist)
Dies ist nicht genau ein Durchschnitt, aber es filtert Spikes, Transienten usw. heraus, benötigt aber keine Arrays für die Speicherung.
Grüße, Karel
Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.
Die API wird sich ein bisschen wackelig anfühlen, wenn Sie noch nicht damit gespielt haben, aber sie ist schnell, leistungsfähig, erweiterbar und macht es schnell möglich, brauchbare Ergebnisse zu erzielen.
Die einfachste Option hierfür ist wahrscheinlich die Verwendung einer %code% , die dies bietet das First-In-First-Out-Verhalten, nach dem Sie suchen. Just Enqueue () Ihre Elemente, und wenn Sie mehr als X Elemente haben, Entfernen Sie die zusätzlichen Elemente ().
meine Implementierung:
%Vor%Verwendung:
%Vor%Eine einfache aber schnelle Implementierung:
%Vor%