Several compilers need this hint from the programmer while others are clever enough to figure it out automatically.
When you have nested loops, declare the counter of the most deeply-nested loop as a register variable. For example:
for (int i = 0; i <1000; ++i)
for (register int j = 0; j <1000; ++j)
// .. this code will be executed a 1,000,000 times
The variable i will be accessed 1000 times. However, j will be accessed a million times. Therefore, storing j in a CPU register can give a significant performance boost compared to storing i in a register. Of course, storing both i and j in registers is even better. Alas, the number of free registers is usually very limited so when you have to make a choice, declare the counter of the innermost loop as a register variable.