The C/C++ register keyword can be used as a hint to the compiler that the declared variable is to be accessed very often during program execution, and hence, should be stored on a machine register instead of RAM, in order to enhance performance. A good example is a loop control variable. When not stored in a register, a significant amount of the loop’s execution time is dedicated to dealing with fetching the variable from memory, assigning a new value to it, and storing it back in memory over and over again. Storing it in a machine register can improve performance significantly:
void my_memset(void * pbuf, size_t bufsize, char assigned_val = ` ') { char *p = static_cast (pbuf); if (pbuf && bufsize) { for (register int i = 0; i < bufsize; i++) * p++ = assigned_val; } return; };
When using register variables please note:
- A register declaration is only a "recommendation" to the compiler, it may be ignored.
- The address of a register variable may not be taken.
- The register keyword can be used for types other than int. In that case, it serves as a hint to the compiler to store the variable in the fastest memory location (for example, cache memory).
- Some compilers ignore the register recommendation and automatically store variables in registers according to a set of built-in optimization rules.