一个程序何时会创建多个堆?

时间:2019-11-09 03:05:53

标签: c++ heap heap-memory

如果以及何时c ++触发分配辅助堆的操作,并且有人出于任何原因想要分配多个堆? c ++中的任何标准动作(例如创建新的名称空间)都会触发此操作,内存如何处理具有相同名称的多个对象?

2 个答案:

答案 0 :(得分:1)

C ++并不要求使用堆,更不要说使用辅助堆。那是实现细节,由每个编译器确定。就语言而言,变量可以具有动态storage duration,但标准并未说明如何实现。

实际上,我所知道的所有编译器都使用堆内存进行动态分配。从理论上讲,每种分配方法(newmalloc)都可以拥有自己的堆,但是没有必要通过引入过多的堆来使内存管理复杂化。另外,您不应该混合使用分配方法。多个堆的好处往往取决于手动微调,而目前,这些微调已超出了编译器的范围。 (程序员可以实现多个堆,但这不同于“触发”多个堆。)

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

答案 1 :(得分:0)

根据我上面的评论中的Dartmouth_edu文章,有很多时间程序可能会利用多个堆。 “ IBM C和C ++编译器使您可以创建和使用自己的内存池(称为堆)。”

  • 很好的例子是,如果您认为堆对象可能损坏堆,则将其隔离在自己的堆中。
  • 如果为一个多部分对象分配整个堆,则只需销毁堆,而不必释放每个组件的内存。
  • 如果您想做像多线程这样的花哨的东西!您还可以通过允许一个线程从其堆中释放内存,而另一个线程使用其自己的独立堆,来加快内存访问速度。

普通用户操作不会创建新的堆。显式创建新堆将创建新堆。 命名空间由地址存储器作用域和指针处理。 @parktomatomi感谢您的帮助。