在C++中是否存在称为"堆栈"的存储区来存储自动变量

aja*_*jay 12 c++ memory-management

在C++中是否存在一个称为堆栈的内存中的特定区域,其中存储了自动变量.

ybu*_*ill 18

不.标准仅提及:

- 静态存储持续时间

- 自动存储持续时间

- 动态存储持续时间

在C++中没有"堆栈内存"这样的东西.然而,通常会说自动存储持续时间变量是"在堆栈上分配",因为它是从计算机科学的角度实现的."堆"是另一个术语,通常指动态存储持续时间,但标准中未提及.

  • 换句话说:"堆栈"是一个实现细节,对于许多实现是通用的,但不是标准强制要求的. (14认同)
  • 在C++标准中没有"堆栈内存"这样的东西.这并不意味着在真正的C++实现中没有堆栈内存这样的东西. (2认同)

Jam*_*mes 1

模糊的问题,但是是的。C++ 中的程序堆栈通常从程序虚拟地址空间的高位开始,然后“向下”移动到程序堆的虚拟地址空间。

编辑:

因为我对此表示同意引发了争议,所以我将附加答案。C++ 标准没有专门调用堆栈来实现本地存储。然而,如上所述这样做是常见的实施实践。

  • @Jay:“实际上,函数变量存储在堆栈中。” 除非它们不是这样,比如它们存储在寄存器中或完全优化掉。 (4认同)