【问题标题】:Where does the local static variable inside static member function resides in memory?静态成员函数内部的局部静态变量在内存中的什么位置?
【发布时间】:2020-07-17 04:34:17
【问题描述】:

静态成员函数中的局部静态变量在内存中的什么位置? 例如:

class Foo
{
public:
    static void Bar()
    {
         static int fooBar;
    }
};

“fooBar”在内存中的位置以及分配时间。

【问题讨论】:

  • 像所有变量一样,它驻留在内存中编译器选择放置的任何位置。

标签: c++ static-methods static-variables


【解决方案1】:

这显然是特定于编译器和平台的,但通常在 PC 上,它与全局变量驻留在同一内存中。它在第一次进入函数时被初始化。

【讨论】:

  • 它在程序启动时“分配”。规则与任何其他类型函数中的静态变量完全相同
  • @john - 这并不完全正确。在第一次调用它包含的函数之前,它不需要存在。但是,当第一次调用该函数时,它必须存在。所以一个实现可以在程序启动时分配它,但不是必需的
  • @Peter 感谢您的澄清。我试图在上面“在 PC 上”的回复中回答。
  • @Peter,c++ 标准说The storage for these entities lasts for the duration of the program,这意味着即使函数没有被调用,静态变量的内存在程序执行期间确实存在。
  • @SPD - 你不能只从标准中挑选一个条款(或者在你的情况下,一个非官方的草案)。无论如何,在您链接到的草稿中,eel.is/c++draft/stmt.dcl#4 的说法不同。
猜你喜欢
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多