This is true. I have my old dog eared C standard, but I don't care to
reread the standard.
volatile int x;
:
x = 123;
this will cause x to be flushed from the register into memory (depending
where x is defined.
x++;
this will increment x in the register then store it in memory.
In the case where x is a global variable, if it is not declared volatile,
the compiler if free to keep its value in a register as long as it wishes.
extern int x;
{
for(x = 0;x < MAX;x++) {
do something;
}
In the above code, the compiler might maintain x in a register for the
entire loop unless something in the loop forces it to be stored, but If the
volatile keyword is used, x will be stored in its memory location when
initialized to 0 and after it is incremented.
But, volatile is not going to prevent the compiler from optimizing the loop
by possibly living out a loop invariant or by unrolling it, etc.
On 2 May 2002 at 16:04, Michael O'Donnell wrote:
> IIRC, the C spec says that a specified change
> to a given datum is supposed to be "complete"
> a "sequence point" is reached which usually
> corresponds in C to the semicolon which
> terminates the corresponding statement. For a
> given variable declared volatile, the compiler
> is free to keep the results of intermediate
> computations involving that datum anywhere it
> likes, but must update the variable's "official"
> location when it reaches the next sequence point.
> This is where the constraints on the optimizer
> come from; you've told it that it's still allowed
> to optimize the code for any given statement or
> group of statements, but all manipulations of
> volatile data must play strictly by the rules
> at the corresponding sequence points.
>
> This rules out register-resident variable in
> most cases.
--
Jerry Feldman <[EMAIL PROTECTED]>
Associate Director
Boston Linux and Unix user group
http://www.blu.org PGP key id:C5061EA9
PGP Key fingerprint:053C 73EC 3AC1 5C44 3E14 9245 FB00 3ED5 C506 1EA9
*****************************************************************
To unsubscribe from this list, send mail to [EMAIL PROTECTED]
with the text 'unsubscribe gnhlug' in the message body.
*****************************************************************