Reputation: 213
Is it OK to say that 'volatile' keyword makes no difference if the compiler optimization is turned off i.e (gcc -o0 ....)?
I had made some sample 'C' program and seeing the difference between volatile and non-volatile in the generated assembly code only when the compiler optimization is turned on i.e ((gcc -o1 ....).
Upvotes: 4
Views: 1853
Reputation: 1
Probably volatile
does not make much difference with gcc -O0
-for GCC 4.7 or earlier. However, this is probably changing in the next version of GCC (i.e. future 4.8, that is current trunk). And the next version will also provide -Og
to get debug-friendly optimization.
In GCC 4.7 and earlier no optimizations mean that values are not always kept in registers from one C (or even Gimple, that is the internal representation inside GCC) instruction to the next.
Also, volatile
has a specific meaning, both for standard conforming compilers and for human. For instance, I would be upset if reading some code with a sig_atomic_t
variable which is not volatile
!
BTW, you could use the -fdump-tree-all
option to GCC to get a lot of dump files, or use the MELT domain specific language and plugin, notably its probe to query the GCC internal representations thru a graphical interface.
Upvotes: 3
Reputation: 500167
No, there is no basis for making such a statement.
volatile
has specific semantics that are spelled out in the standard. You are asserting that gcc -O0
always generates code such that every variable -- volatile
or not -- conforms to those semantics. This is not guaranteed; even if it happens to be the case for a particular program and a particular version of gcc
, it could well change when, for example, you upgrade your compiler.
Upvotes: 10