程序什么时候会创建多个堆

When would a program create multiple heaps?

本文关键字:创建 什么时候 程序      更新时间:2023-10-16

如果c++何时触发分配辅助堆的操作,有人想要分配多个堆的原因吗?c++中的任何标准操作,比如创建一个新的命名空间,都会触发这个问题吗?内存是如何处理多个同名对象的?

根据我上面评论中的Dartmouth_edu文章,一个程序可能会使用多个堆。"IBM C和C++编译器允许您创建和使用自己的内存池,称为堆。">

  • 好的例子是,如果您认为堆对象可能会损坏堆,则将其隔离在自己的堆中
  • 如果您为一个多部分对象分配了一个完整的堆,那么您可以销毁堆,而不必释放每个组件的内存
  • 如果你想做一些花哨的事情,比如多线程!您还可以通过允许一个线程从其堆中释放内存来加快内存访问,而另一个线程则使用自己的独立堆

正常的用户操作不会创建新的堆。显式地创建一个新堆会创建一个新堆。命名空间由地址内存作用域和指针处理@谢谢你的帮助。

C++并没有规定堆的使用,更不用说辅助堆的使用了。这是一个由每个编译器决定的实现细节。就语言而言,变量可以具有动态存储持续时间,但标准没有说明如何实现这一点。

在实践中,我所知道的所有编译器都使用堆内存进行动态分配。理论上,每种分配方法(newmalloc(都可以有自己的堆,但几乎没有理由通过引入超过必要数量的堆来使内存管理复杂化。另外,您不应该混合分配方法。多堆的好处往往取决于手动微调,而这目前超出了编译器的能力。(程序员可以实现多个堆,但这与"触发"多个堆不同。(

命名空间和对象名是一个不相关的主题,因为它们不存在于可执行文件中(除非作为调试器的注释保留(。