| 8 |
Hat im weitesten Sinne vielleicht noch was mit codekicker zu tun die Frage, aber meiner Meinung nach sind das Fragen, die man sinnvoller mit einer Suchmaschine lösen kann. So findet man da http://de.wikipedia.org/wiki/Volatile_%28Informatik%29 oder auch direkt zu C/C++ http://www.imb-jena.de/~gmueller/kurse/c_c++/c_volat.html was die Frage schon irgendwie beantwortet.
– lunatigs 19.10.09
|
|
| 3 |
wenigstens kommt dadurch ein wenig mehr leben auf codekicker.de :D
– Floyd 19.10.09
|
Das Schlüsselwort volatile teilt dem Compiler mit, daß die mit name bezeichnete Variable mit dem Datentyp typ durch Ereignisse außerhalb der Kontrolle des Programms verändert werden kann.
Der Wert der Variablen muß deshalb vor jedem Zugriff neu aus dem Hauptspeicher eingelesen werden, d.h. er darf nicht in einem Register des Prozessors zwischengespeichert werden.
Der Compiler arbeitet bei mit volatile deklarierten Variablen ohne jede Optimierung, d.h. läßt die entsprechenden Werte bei jedem Zugriff neu aus dem Hauptspeicher laden und sorgt bei Veränderungen dafür, daß die neuen Werte ohne Verzögerung dort sofort abgelegt werden.
volatile verhindert bestimmte Optimierungsmaßnahmen des Compilers, es sorgt dafür, daß Operationen so ausgeführt werden, wie sie im Quelltext notiert werden, d.h. zum Beispiel, es werden keine Umstellungen vorgenommen und Werte werden nicht in einem Cache gehalten, d.h. veränderte Werte werden nicht "zurückgehalten".
| 1 |
Es ist nicht nur für Treiberentwicklung erforderlich sondern eher allgemein für Multi-Threading-Entwicklungen wenn auf gemeinsame Ressourcen zugegriffen wird.
– gfoidl 19.10.09
|
|
| 1 |
Ich muss zu geben das ich werder mit Java noch mit C++ programmierer und volatile nicht mal kannt bis zur Fragestellung. Hab einfach Google 3 Minuten lang benutzt und mich informiert. Dazu etwas logisches Denkvermögen, und man hat die Antwort.
– Floyd 19.10.09
|
|
| 1 |
Sehr vorbildlich ;)
Ich brauche volatile auch nur in C# und Fortran - aber für den gleichen Zweck. – gfoidl 19.10.09
|
class Test {
volatile int a;
public void test() {
a = 7;
a = 4;
a = 7;
}
}| 3 |
Umsortieren würde der Compiler deinen Code eh nicht, sondern Wegoptimieren :D So das am ende nur
public void test() { a = 7; } stehen bleibt. Den Effekt hatte ich übrigens bereits mit in meinem Post erwähnt. Zitat: "volatile verhindert bestimmte Optimierungsmaßnahmen des Compilers, es sorgt dafür, daß Operationen so ausgeführt werden, wie sie im Quelltext notiert werden, d.h. zum Beispiel, es werden keine Umstellungen vorgenommen [...]" Sind dir Besonderheiten bekannt die sich nur auf Java beziehen? Ich kann mir nichtmal nen Anwendungsfall vorstellen wo ich das in Java brauche. – Floyd 19.10.09
|