Durchsetzung der Anweisungsreihenfolge in C
Frage:
Wie kann man die Neuordnung von verhindern? Anweisungen im C-Code, auch mit Optimierungen aktiviert?
Antwort:
Trotz der allgemeinen Annahme erzwingt C nicht von Natur aus die Reihenfolge der Anweisungen, insbesondere bei Optimierungen. Bestimmte Anweisungen erscheinen im optimierten Code möglicherweise nicht in der richtigen Reihenfolge, was für Szenarien wie zeitkritische Vorgänge problematisch sein kann.
Lösungen:
Grundsätzlich die Manipulation des Operativen Die Semantik grundlegender Operationen wie der Addition zur Erzielung einer strengen Ordnung ist nicht möglich. Die Optimierungen des Compiler- und Hardware-Designs basieren auf der Annahme, dass diese Vorgänge keine beobachtbaren Timing-Eigenschaften haben.
Es sind jedoch wirksame Techniken für das Mikro-Benchmarking entstanden:
Undurchsichtige Datenmanipulation :
Bibliotheksunterstützung:
template <class T> __attribute__((always_inline)) inline void DoNotOptimize(const T &value) { asm volatile("" : "+m"(const_cast<T &&>(value))); }
Compiler-Anweisungen:
Hinweis:
Das C-Standardisierungskomitee untersucht die Standardisierung von APIs wie DoNotOptimize, um die Durchsetzung der Kontoauszugsreihenfolge weiter zu erleichtern.
Das obige ist der detaillierte Inhalt vonWie kann ich die Neuordnung von Anweisungen in optimiertem C-Code verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!