为什么C++资源中很少提到堆栈和堆?

10
在《C# in a Nutshell》等书中,对于栈和堆内存的分配介绍得非常快。然而,《Programming Principles and Practice Using C++》、标准和cppreference.com等C++来源在讨论存储期/类时从未提到过栈或堆,为什么呢?这是因为不同编程语言中分配位置是否相同是实现特定的吗?如果后者是真的,我就能理解为什么没有涵盖不同实体分配位置的内容了。请注意保留原文中的html标签及其格式。

2
C#和C++的区别在于,C#针对一小部分平台,其中堆栈都真正存在。相反,C++更加通用,其创建者不希望将其可移植性限制在这些平台上。 - Daniel Langr
2
由于存在没有堆栈和堆的实现。对于普通的C和C++嵌入式系统来说,没有堆是很正常的。甚至有一些非常低端的8位处理器没有堆栈,但仍然得到了C编译器的支持。 - Lundin
2个回答

18

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

这就是为什么 C++ 书籍会使用标准术语“自动”和“动态”存储。

如果您正在阅读有关编译器设计和实现的书,则应该可以完全预料到有关堆和栈的全面描述。


1
那么,“是否实现特定的分配位置”回答“是”的情况是怎样的? - user8552461
3
@Dip:因为“heap”是 C# 语言中的一个明确概念。 - Bathsheba
我明白了。但是,正如我在问题中提到的那样,这些C++源代码非常广泛地使用了“实现特定”的内容,所以我想知道为什么他们没有在类似于C++内存模型的东西中使用它 - 那不是很有意义吗?例如,“实际分配是实现特定的”。 - user8552461
2
@Dip:C++故意不对其内存模型做出太多说明。这样它可以在非常多的不同机器上使用。虽然在这方面,C甚至更加灵活。 - Bathsheba
1
好的。顺便说一下,我现在只是为了澄清问题而提出问题;你已经以我理解的方式回答了实际问题。无论如何,你的意思是C++内存模型缺乏详细说明,这可能/应该被解释为模型的某些部分(例如分配)是实现特定的? - user8552461
显示剩余8条评论

-1

你感兴趣的不是关于C++编程语言/标准的书,而是关于例如C++标准库的实现。在那里,你会更多地了解有关堆栈/堆上内存分配的信息。例如,Nicolai M. Josuttis的《C++标准库:教程与参考》。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接