程序什么时候会创建多个堆
When would a program create multiple heaps?
如果c++何时触发分配辅助堆的操作,有人想要分配多个堆的原因吗?c++中的任何标准操作,比如创建一个新的命名空间,都会触发这个问题吗?内存是如何处理多个同名对象的?
根据我上面评论中的Dartmouth_edu文章,一个程序可能会使用多个堆。"IBM C和C++编译器允许您创建和使用自己的内存池,称为堆。">
- 好的例子是,如果您认为堆对象可能会损坏堆,则将其隔离在自己的堆中
- 如果您为一个多部分对象分配了一个完整的堆,那么您可以销毁堆,而不必释放每个组件的内存
- 如果你想做一些花哨的事情,比如多线程!您还可以通过允许一个线程从其堆中释放内存来加快内存访问,而另一个线程则使用自己的独立堆
正常的用户操作不会创建新的堆。显式地创建一个新堆会创建一个新堆。命名空间由地址内存作用域和指针处理@谢谢你的帮助。
C++并没有规定堆的使用,更不用说辅助堆的使用了。这是一个由每个编译器决定的实现细节。就语言而言,变量可以具有动态存储持续时间,但标准没有说明如何实现这一点。
在实践中,我所知道的所有编译器都使用堆内存进行动态分配。理论上,每种分配方法(new
与malloc
(都可以有自己的堆,但几乎没有理由通过引入超过必要数量的堆来使内存管理复杂化。另外,您不应该混合分配方法。多堆的好处往往取决于手动微调,而这目前超出了编译器的能力。(程序员可以实现多个堆,但这与"触发"多个堆不同。(
命名空间和对象名是一个不相关的主题,因为它们不存在于可执行文件中(除非作为调试器的注释保留(。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 什么时候在C++中返回常量引用是个好主意
- 什么时候调用析构函数
- boost odeint什么时候真正调用观测者
- 编译器对数组声明大小的计算。什么时候发生?
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 您应该在什么时候创建自己的异常类型
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 程序什么时候会创建多个堆
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 由放置新创建的平凡类型的生存期从什么时候开始?
- 我什么时候应该使用删除?(在动态创建的2D数组之后未删除的后果)
- 我怎么能知道一个进程是什么时候创建的,并阻止它在windows中执行或终止它
- 创建线程时,我们什么时候必须使用LPTHREAD_START_ROUTINE
- 什么时候在c++中创建对象?
- Ofstream,什么时候它会失败而不是创建一个新文件
- 什么时候用Qt在opengl中创建渲染上下文?
- 我应该在什么时候为我的项目创建一个存储库
- 什么时候删除对象?创建对象对c++的影响
- 我什么时候用cocos2d-x中的参数初始化自定义创建函数中的变量?