Register Variables
Register variables are a special case of automatic variables.
Automatic variables are allocated storage in the memory of the
computer; however, for most computers, accessing data in memory is
considerably slower than processing in the CPU. These computers often
have small amounts of storage within the CPU itself where data can be
stored and accessed quickly. These storage cells are called registers.
Normally,
the compiler determines what data is to be stored in the registers of
the CPU at what times. However, the C language provides the storage
class register so
that the programmer can ''suggest'' to the compiler that particular
automatic variables should be allocated to CPU registers, if possible.
Thus, register variables
provide a certain control over efficiency of program execution.
Variables which are used repeatedly or whose access times are critical,
may be declared to be of storage class register.
Register
variables behave in every other way just like automatic variables. They
are allocated storage upon entry to a block; and the storage is freed
when the block is exited. The scope of register variables is local to
the block in which they are declared. Rules for initializations for
register variables are the same as for automatic variables.
Example above shows a code fragment for a main() function that uses register as well as auto storage class. The class specifier simply precedes the type specifier in the declaration. Here, the variable, a, should be allocated to a CPU register by the compiler, while bb and cc will be allocated storage in memory. Note, the use of the auto class specifier is optional.
As stated above, the register class
designation is merely a suggestion to the compiler. Not all
implementations will allocate storage in registers for these variables,
depending on the number of registers available for the particular
computer, or the use of these registers by the compiler. They may be
treated just like automatic variables and provided storage in memory.
Finally,
even the availability of register storage does not guarantee faster
execution of the program. For example, if too many register variables
are declared, or there are not enough registers available to store all
of them, values in some registers would have to be moved to temporary
storage in memory in order to clear those registers for other variables.
Thus, much time may be wasted in moving data back and forth between
registers and memory locations. In addition, the use of registers for
variable storage may interfere with other uses of registers by the
compiler, such as storage of temporary values in expression evaluation.
In the end, use of register variables could actually result in slower
execution. Register variables should only be used if you have a detailed
knowledge of the architecture and compiler for the computer you are
using. It is best to check the appropriate manuals if you should need to
use register variables.
See Also:
No comments:
Post a Comment