静态变量定义时间C ++

时间:2017-03-30 18:21:38

标签: c++

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

我知道静态变量的初始化发生在它定义的函数中,但我不是在谈论初始化而是定义,当它在我的stoarge中需要sapar时。

我发现它总是位于比主要局部变量更低的地址?它有关系吗?如果之前定义的变量总是在地址中较低?谢谢你的回答

1 个答案:

答案 0 :(得分:2)

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

enter image description here

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

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

这几乎是关于内存变量位置的所有知识。其他任何东西在很大程度上取决于编译过程的代码生成步骤的作者的决定。