hii

G

Ganga

Please, will anyone explain me difference between 'register' and
'volatile' variables
 
N

Nick Keighley

Ganga said:
Please, will anyone explain me difference between 'register' and
'volatile' variables

is this homework? Why don't you lookup the answer in your textbook?
 
U

Umesh

Ganga said:
Please, will anyone explain me difference between 'register' and
Register keyword for a variable will force the compiler backend to give
register.
so by this compiler can acess the variable without store
instruction(i.e it can use mov instruction).
'volatile' variables
Volatile Keyword for a variable will prevent variable from
optimization.
i.e
main()
{
int i=2,j=3,a,b;
a=i+j;
b=i+j;

return a+b;
}

For above code the compiler try to optimize the code.
i.e
main()
{
int i=2,j=3,a,b
t=i+j; //where t is the temproray variable which is interal generated
by compiler.
a=t;//a & b are automatic variable.
b=t;
// by this we can save one addition.
return a+b;
}

main()
{
volatile int i=2,j=3,a,b;
a=i+j;
b=i+j;

return a+b;
}

but in the case volatile.it prevents variables(i,j) from optimization.
so above code remain same.
 
U

Umesh

Ganga said:
Please, will anyone explain me difference between 'register' and
Register keyword for a variable will force the compiler backend to give
register.
so by this compiler can acess the variable without store
instruction(i.e it can use mov instruction).
'volatile' variables
Volatile Keyword for a variable will prevent variable from
optimization.
i.e
main()
{
int i=2,j=3,a,b;
a=i+j;
b=i+j;

return a+b;
}

For above code the compiler try to optimize the code.
i.e
main()
{
int i=2,j=3,a,b
t=i+j; //where t is the temproray variable which is interal generated
by compiler.
a=t;//a & b are automatic variable.
b=t;
// by this we can save one addition.
return a+b;
}

main()
{
volatile int i=2,j=3,a,b;
a=i+j;
b=i+j;

return a+b;
}

but in the case volatile.it prevents variables(i,j) from optimization.
so above code remain same.
 
V

Vladimir S. Oka

Umesh said:
Register keyword for a variable will force the compiler backend to give
register.
so by this compiler can acess the variable without store
instruction(i.e it can use mov instruction).

Not entirely correct. The `register` keyword will /suggest/ to the
compiler that a variable be stored in a register. Most modern compilers
are better at optimising than programmers, and will happily ignore the
`register` keyword.
Volatile Keyword for a variable will prevent variable from
optimization.

Again, not entirely correct. The `volatile` keyword tells the compiler
that the variable may be changed by something outside the scope of the
current program (other programs in the system, hardware device, cosmic
rays...). Because of this, the compiler cannot be certain of the value
of the `volatile` variable, even if your code did not change it, and
will hence avoid optimisations that rely on that value not changing
between two points in the code.

For example, in the snippet:

int main(void)
{
volatile int i = 5;
int j = 6;

while (3 < i)
{
++j;
}

return 0;
}

The compiler cannot assume that `i` will be 5 when it is tested for the
`while` loop, and hence cannot replace it with the equivalent of `while
(1)`, but has to generate the code for the test. If `i` was not
`volatile`, the compiler could generate the equivavalent of:

int main(void)
{
int j = 6;

endless_loop:
++j;
goto endless_loop;
}

(Note that it could get rid of `i` altogether.)

<snipped not so good an example>

Cheers

Vladimir
 
M

Mike Wahler

Ganga said:
Please, will anyone explain me difference between 'register' and
'volatile' variables

The difference depends upon their values.

register int r = 42;
volatile int v = 25;

printf("Difference between %d and %d is %d\n", r, v, r - v);

If you really mean to ask about the difference between
the 'register' and 'volatile' keywords, the answer can
be found in any good C book.

-Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top