【问题标题】:C++ standard terminology for heap/stack [closed]堆/堆栈的 C++ 标准术语 [关闭]
【发布时间】:2011-09-25 09:02:17
【问题描述】:

应该使用的术语似乎有些不确定。似乎有两种不同的观点:

  1. 有些人喜欢用堆和栈来表示字节的位置
  2. 其他人坚持认为不应在 c++ 中使用这些“堆”和“堆栈”术语,而是更喜欢“自动存储持续时间”术语。

但显然程序员使用一套术语,而标准使用另一套。但是应该使用什么术语呢?为什么?仍然存在他们的意思不同的问题吗?但是,在 freenode 的##C++ 通道中使用堆栈/堆术语时,似乎一直存在分歧。我们现在已经得出了 duration!=location 的结论,但我们仍然应该确定首选术语是什么。

【问题讨论】:

标签: c++ memory-management heap-memory stack-memory


【解决方案1】:

“堆”和“栈”只是 C++ 标准规定的一般概念的实际实现。

该标准不关心您将对象存储在哪里,它关心这些对象的生命周期,因此它谈论“自动存储持续时间”。

但编译器通常使用堆栈作为实现此功能的工具之一。 但是,正如 cmets 中所指出的,并非每个具有自动持续时间的对象都位于堆栈上。类成员具有自动存储持续时间,无论所属对象是否在堆栈中。

对于很多常见用法,两者可以互换而不会真正造成混淆。堆栈上的对象具有自动存储持续时间,通常在谈到“自动存储持续时间”时也会想到它们。

只要你不声称某东西在堆上时是堆栈分配的,我不会太在意你使用哪个术语。

【讨论】:

  • 如果您关心正确性。考虑struct T { int x; }; T* t = new T;int 在哪里?许多人会称它为“在堆栈上”,尽管它显然将位于免费商店中。但是,它仍然具有自动存储期限。
  • tomalak 的示例 int 显然在堆上。如果你做 int main() { T t; 它会改变} 然后它将在堆栈上。两者都改变​​了该 int x;... 的状态。也就是说,这取决于你如何分配那块内存。
  • @tp1:是的,我对此没有异议。我尝试编辑我的答案以使其更清晰。
  • @Tomalak:我认为t 具有自动存储持续时间,*tt->xt 的子对象)都具有动态存储持续时间。
  • 无论所属对象是否在堆栈中,类成员都有自动存储期限。 你能解释一下吗?标准中的部分,所以我可以自己查一下?
【解决方案2】:

堆栈是具有自动存储持续时间(一个抽象概念)的对象存储实现。对于堆和动态存储持续时间也是如此。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 2010-09-27
    • 2013-05-26
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多