存储静态变量的位置(数据段或堆或BSS)?

SIV*_*IVA 2 c heap static

我获得了关于静态变量存储的矛盾意见.

意见1:" 堆栈静态变量将其值存储在堆中 "

意见2:" 堆栈静态变量将其值存储在数据段中".

我对这些相互矛盾的答案感到困惑.

哪里存储了静态变量?

我期待着参考文献的答案(教科书,真实的教程等).

静态变量有两种类型:

  1. 在函数内声明的静态变量.
  2. 全局(声明的外部函数)静态变量.

我还想知道这两种变量的存储是否存在差异?

Jon*_*ler 10

'堆栈变量'通常存储在'堆栈'中,它与程序的文本,数据,bss和堆部分分开.

你的问题的后半部分是关于'静态'变量,它们与堆栈变量不同 - 实际上,静态变量根本不存在于堆栈中.传统上,静态变量都将出现在程序的数据或bss部分中.对于现代编译器,如果数据是const限定的,那么数据可以存储在程序的文本部分中,这具有多种好处(包括强制的非可修改性).

C标准没有规定存在堆栈,也没有bss部分.它只需要存储空间可用于具有适当持续时间的变量.