Home / Questions / Describe about storage allocation and scope of global, extern, static, local and registervariables?
Explanatory Question

Describe about storage allocation and scope of global, extern, static, local and registervariables?

👁 1,576 Views
📘 Detailed Answer
🕒 Easy to Read
Read the answer carefully and go through the related questions on the right side to improve your understanding of this topic.

Answer with Explanation

Globals have application-scope. They are available in any compilation unit that includes an appropriate declaration (usually brought from a header file). They're stored wherever the linker puts them, usually a place called the BSS segment.
Extern: This is essentially "global".
Static: Stored the same place as globals, typically, but only available to the compilation unit that contains them. If they are block-scope global, only available within that block and its subblocks.
Local: Stored on the stack, typically. Only available in that block and its subblocks. (Although pointers to locals can be passed to functions invoked from within a scope where that local is valid.)
Register: See tirade above on "local" vs. "register". The only difference is that the C compiler will not let you take the address of something you've declared as "register".