我试图在c中找到内存分配。
根据following link,堆栈和未初始化的数据段是不同的,并且本地函数的未初始化数据转到未初始化的数据段。
如果是这种情况,那么在具有未初始化的局部变量的代码中,存储在堆栈段中的是什么?它是空的吗?
答案 0 :(得分:2)
我不建议阅读" geeksforgeeks"教程。你有一些误解。
他们称之为"未初始化的数据",.bss
段,实际上是静态存储持续时间变量零初始化的存储。包括任何明确初始化为零值的变量。
可以找到静态存储持续时间和不同公共段的解释,以及示例here。
仅具有静态存储持续时间的变量最终位于.bss
和.data
。无论是否初始化,局部变量总是在堆栈或CPU寄存器中结束。
(请注意,这些都不是ISO C标准规定的,而是由行业事实上的标准规定。)
答案 1 :(得分:1)
本地函数的未初始化数据转到未初始化的数据段。
嗯,这并不完全正确。
仔细阅读,(from the same link,强调我的)
[...]未初始化的数据从数据段的末尾开始,包含所有全局变量和静态变量,这些变量和静态变量初始化为零或源代码中没有显式初始化。 [。 ..]
因此,自动存储变量仍然存在于堆栈段中,而不管它们是否已初始化。
这就是说,谨慎,这是"典型的记忆表示",不是普遍的。对于此事,C标准并未要求拥有堆栈段(或任何其他段)。