I obtained conflicting Opinions about static variable storage.
Opinion 1 : "A stack static variable stores its value in the heap"
Opinion 2 : "A stack static variable stores its value in the data segment".
I am confused with these conflicting answers.
Where exactly are static variables stored?
I am expecting an answers with references (text books, authentic tutorials, etc.).
Static variables have two types:
static variables declared inside a function.
global (declared outside function) static variable.
I would also like to know if there is any difference in the storage of these two types of variables?
解决方案
The 'stack variables' are usually stored on 'the stack', which is separate from the text, data, bss and heap sections of your program.
The second half of your question is about 'static' variables, which are different from stack variables - indeed, static variables do not live on the stack at all. Classically, static variables would all be in the data or bss sections of your program. With modern compilers, if the data is const-qualified, then the data may be stored in the text section of your program, which has a variety of benefits (including enforced non-modifiability).
The C standard does not dictate that there is a stack, nor a bss section. It just requires storage space to be available for variables with appropriate durations.