register (keyword)
In the C programming language, register
is a reserved word (or keyword), type modifier, storage class, and hint. The register
keyword was deprecated in C++, until it became reserved and unused in C++17. It suggests that the compiler stores a declared variable in a CPU register (or some other faster location) instead of in random-access memory. If possible depending on the type of CPU and complexity of the program code, it will optimize access to that variable and hence improve the execution time of a program. In C (but not C++ where the keyword is essentially ignored) the location of a variable declared with register
cannot be accessed, but the sizeof
operator can be applied.[1] Aside from this limitation, register
is essentially meaningless in modern compilers due to optimization which will place variables in a register if appropriate regardless of whether the hint is given. For programming of embedded systems register
may still be significant; for example the Microchip MPLAB XC32 compiler allows the programmer to specify a particular register with the keyword; however, this is discouraged in favor of the compiler's optimizations.[2] When used, register
is typically for loop counters, or possibly for other very frequently used variables in the code.
Examples
/* store integer variable "i" in RAM, register, or other location as compiler sees fit */
int i;
/* suggests storing integer variable "i" in a CPU register or other fast location */
register int i;
References
- "INTERNATIONAL STANDARD ISO/IEC 9899:TC2" (PDF).
- "MPLABĀ® XC32 C/C++ Compiler User's Guide" (PDF). p. 170.