Objects with the register storage class specifier have automatic storage duration. Each time a block is entered, storage for register objects defined in that block is made available. When the block is exited, the objects are no longer available for use.
If a register object is defined within a function that is recursively invoked, memory is allocated for the variable at each invocation of the block.