hii

Discussion in 'C Programming' started by Ganga, Jan 31, 2006.

  1. Ganga

    Ganga Guest

    Please, will anyone explain me difference between 'register' and
    'volatile' variables
     
    Ganga, Jan 31, 2006
    #1
    1. Advertising

  2. Ganga wrote:

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


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


    --
    Nick Keighley
     
    Nick Keighley, Jan 31, 2006
    #2
    1. Advertising

  3. Ganga

    Umesh Guest

    Ganga wrote:
    > 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.
     
    Umesh, Jan 31, 2006
    #3
  4. Ganga

    Umesh Guest

    Ganga wrote:
    > 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.
     
    Umesh, Jan 31, 2006
    #4
  5. Umesh wrote:
    > Ganga wrote:
    > > 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).


    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' variables

    > 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
     
    Vladimir S. Oka, Jan 31, 2006
    #5
  6. Ganga

    Mike Wahler Guest

    "Ganga" <> wrote in message
    news:...
    > 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
     
    Mike Wahler, Jan 31, 2006
    #6
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. killer_pulsar

    hii guys.

    killer_pulsar, Jan 31, 2006, in forum: Python
    Replies:
    0
    Views:
    415
    killer_pulsar
    Jan 31, 2006
  2. kumud_2k66

    hii

    kumud_2k66, Sep 1, 2006, in forum: .NET
    Replies:
    0
    Views:
    589
    kumud_2k66
    Sep 1, 2006
Loading...

Share This Page