【问题标题】:Is there a particular reason that stacks and heaps aren't mentioned more often in C++ resources?C++ 资源中没有更频繁地提及堆栈和堆是否有特殊原因?
【发布时间】:2019-08-06 06:20:37
【问题描述】:

在诸如“C# in a Nutshell”之类的书中,很快就介绍了在堆栈和堆上分配的内容。然而,诸如“Programming Principles and Practice Using C++”、标准和 cppreference.com 之类的 C++ 资源从未提及有关内存分配的堆栈或堆——即使他们谈论存储持续时间/类时也没有提及。为什么是这样?它是特定于实现的,在所有编程语言之间分配的位置或堆栈和堆的使用是否相同?如果后者是真的,我会理解没有涵盖不同实体的分配位置。

【问题讨论】:

  • C# 和 C++ 之间的区别在于,C# 针对的是非常小的平台集,其中堆栈和堆都确实存在。相反,C++ 更加通用,它的创建者并不想将其可移植性限制在此类平台上。
  • 因为存在没有堆栈和堆的实现。对于普通的 C 和 C++ 嵌入式系统来说,没有堆是正常的。甚至还有一些非常低端的 8 苦味没有堆栈,但得到了 C 编译器的支持。

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


【解决方案1】:

堆栈和堆不是 C++ 语言 概念(除了 C++ 标准库中的奇函数),而是 实现 概念。

这就是为什么 C++ 书籍将使用标准术语 automaticdynamic 存储来代替。

如果您正在阅读一本关于编译器设计和实现的书,那么您完全可以期待关于堆栈和堆的全面散文。

【讨论】:

  • 所以“是”对“特定于实现的内容分配在哪里”?
  • @Dip:只要分配符合标准,就可以。
  • @Dip:因为“堆”是一个明确的 C# 语言概念。
  • @Dip:C++ 有意对其内存模型没有多说。通过这种方式,它可以在很多不同的机器上使用。虽然在这方面 C 更加灵活。
  • 好的。顺便说一句,我现在只是在问问题以进行澄清;您以我理解的方式回答了实际问题。无论如何,所以你的意思是 C++ 的内存模型缺乏详细说明可以/应该被解释为意味着模型的某些部分(例如分配)是特定于实现的?
【解决方案2】:

您感兴趣的不是一本关于 C++ 编程语言/标准的书,而是关于例如 C++ 标准库的实现的书。在那里,您将阅读更多关于堆栈/堆上的内存分配的信息。例如,Nicolai M. Josuttis 的“C++ 标准库:教程和参考”。

因为 C/C++ 也可以在没有任何动态内存分配支持的平台上使用(对于某些嵌入式应用程序,编译器甚至禁止使用 new 和 malloc),因此 C++ 编程书籍中没有太多参考。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 2023-01-17
    • 2012-08-31
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2020-12-11
    相关资源
    最近更新 更多