c++ - 静态变量定义时间 C++

标签 c++

我遇到了一个我不知道答案的问题,所以我在这里发帖:) 静态变量是否在程序启动时或当我进入定义它的函数时定义(未初始化)?

我知道静态变量的初始化发生在它定义的函数中,但我不是在谈论初始化,而是在谈论定义,当它占用我的存储空间时。

我发现它总是位于比 main 中的局部变量低的地址?有关系吗?如果之前定义了变量,它们的地址是否总是较低?感谢您的回答

最佳答案

请考虑典型 C/C++ 程序的内存布局,例如 CS-fundamentals.com

enter image description here

外部变量(来自其他模块)、全局变量和静态变量的位置称为未初始化数据段(或bss)。由于程序无法猜测将调用哪些函数,因此可以合理地相信所有作用域内的本地静态变量都将在程序开始时定义其位置。

局部变量(离开函数时消失的变量)保存在堆栈区域中。

这几乎就是我们所知道的有关内存变量放置的所有信息。其他任何事情很大程度上取决于编译过程的代码生成步骤的作者的决定。

关于c++ - 静态变量定义时间 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125599/

相关文章:

c++ - 在 C++ 缓冲输出中避免 memcpy

c++ - 为什么这个单例实现不能编译?

c++ - 检查预处理器中是否使用 -fopenmp 调用了 g++

c++ - 为什么在类中声明,在函数中定义的变量可以被初始化?

c++ - 如何保留命令行选项但向 gcc 中的某些函数添加更多优化标志

c++ 我应该在这个 dll 脚本中使用什么类型?

c++ - 从嵌入式 python 打印到 cout

c++ - 如何使用 cmake 从 Visual Studio 构建 ia32 解决方案

c++ - 如何使用 C++ 中的 openssl 库验证自签名证书?

c++ - 返回条件 `range_expression`