Frage:
Warum verzichten Compiler darauf Zusammenführen aufeinanderfolgender Schreibvorgänge desselben Werts zu einem einzelnen Atom Variable?
Antwort:
Während die C 11/C 14-Standards die Zusammenlegung mehrerer Speicher zu einem einzigen zulassen, implementieren Compiler diese Optimierung aus folgenden Gründen nicht:
1. Probleme mit dem Fortschrittsbalken:
Sinkende und faltende Schleifenspeicher können dazu führen, dass ein Fortschrittsbalken bei Null hängen bleibt, bis er am Ende auf 100 % springt, anstatt den Fortschritt schrittweise anzuzeigen.
2. Prinzip der geringsten Überraschung:
Programmierer erwarten, dass jede atomare Speicheranweisung eine separate Speicheroperation hat und nicht wegoptimiert wird. Dadurch wird unerwartetes Verhalten vermieden.
3. Begrenzte Anwendungsfälle:
Compiler haben festgestellt, dass Szenarios, in denen diese Optimierung vorteilhaft wäre, wie z. B. die Reduzierung unnötiger Shared_ptr-Ref-Count-Vorgänge, selten sind.
1. Als-Wenn-Regel:
Die Als-Wenn-Regel ermöglicht es Compilern, die Reihenfolge von Speicheroperationen zu bestimmen, auch wenn der Quellcode etwas anderes angibt. Dies ermöglicht interne Optimierungen, die das Verhalten des Programms verändern können.
1. API-Erweiterungen:
In C-Arbeitsgruppen laufen derzeit Diskussionen zur Erweiterung der std::atomic-API, um die Kontrolle über das Optimierungsverhalten zu ermöglichen und es Compilern zu ermöglichen, bei Bedarf zu optimieren.
2. Flüchtige atomare Variablen:
Verwendung flüchtiger atomarer
Das obige ist der detaillierte Inhalt vonWarum optimieren Compiler nicht aufeinanderfolgende redundante „std::atomic'-Schreibvorgänge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!