c - 堆栈段和未初始化数据段的区别

标签 c

我试图交出 c 中的内存分配。

根据following link ,栈和未初始化数据段不同,本地函数的未初始化数据进入未初始化数据段。

如果是这种情况,那么在代码中包含未初始化局部变量的情况下,堆栈段中存储的是什么?它是空的吗?

最佳答案

我不推荐阅读“geeksforgeeks”教程。你有一些误解。

他们所谓的“未初始化数据”,.bss 段,实际上是存储静态存储持续时间的变量,零初始化。包括明确初始化为零值的任何此类变量。 可以找到静态存储持续时间和不同公共(public)段的解释以及示例 here .

只有 具有静态存储持续时间的变量以.bss.data 结束。局部变量总是在堆栈或 CPU 寄存器中结束,无论它们是否被初始化。

(请注意,这些都不是由 ISO C 标准指定的,而是由行业事实上的标准指定的。)

关于c - 堆栈段和未初始化数据段的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47301556/

相关文章:

c++ - 是否可以在进程中的所有线程上设置 pthread_sigmask?

c - 如何更改 C 函数中的指针值

c - 像 "typedef int (f)(void)"这样带括号的 typedef 是什么意思?它是一个函数原型(prototype)吗?

c - malloc 和全局变量声明在 C 中将它们的变量分配到哪里?

c - 为什么 ICC 在 x86 上的汇编中生成 "inc"而不是 "add"?

c - 当我通过 ffmpeg 获取 RTSP 流时如何创建缓冲区?

c - 如何解决C中的未定义结构?

由于权限错误 (EACCES),无法创建 POSIX 命名信号量

c - 从 c 字符串中删除 charAt

无法从其他驱动器访问文件