我获得了有关静态变量存储的相互矛盾的意见。
意见1:“A 堆栈静态变量将其值存储在堆”
意见2:“A 堆栈静态变量将其值存储在数据段中。”
我对这些相互矛盾的答案感到困惑。
哪里存储了静态变量?
我期待着参考文献的答案(教科书,真实的教程等)。
静态变量有两种类型:
我还想知道这两种变量的存储是否存在差异?
答案 0 :(得分:10)
'堆栈变量'通常存储在'堆栈'中,它与程序的文本,数据,bss和堆部分分开。
你的问题的后半部分是关于'静态'变量,它们与堆栈变量不同 - 实际上,静态变量根本不存在于堆栈中。传统上,静态变量都将出现在程序的数据或bss部分中。对于现代编译器,如果数据是const限定的,那么数据可以存储在程序的文本部分中,这具有多种好处(包括强制执行的非可修改性)。
C标准没有规定存在堆栈,也没有bss部分。它只需要存储空间可用于具有适当持续时间的变量。
答案 1 :(得分:0)
启动应用程序时会分配堆栈内存,并且在执行应用程序期间始终保持相同的大小。它不存储在DATA段中,DATA段用于应用程序中使用的常量值(例如字符串文字)。
答案 2 :(得分:0)
本地和全局静态变量都保存在初始化的数据段
中有两个数据段初始化数据段和单位化数据段。
单位数据段也称为BSS。
当我们说数据段时,默认情况下它初始化数据段,此部分从程序的加载图像中复制。 (所有全局变量和局部静态变量初始化为非零,即ini var1_global = 10;)
未初始化的数据segemnet又称BSS。在调用main()之前,此部分将初始化为零generall。所有单位化的全局本地静态都在这里。