【发布时间】:2013-02-25 04:57:10
【问题描述】:
C++ 有两种主要的内存类型:堆和栈。有了堆栈,我什么都清楚了,但是关于堆还有一个问题:
堆内存是如何组织的?我读到了heap data structure,但这似乎不适用于堆,因为在 C++ 中我可以访问堆中的任何数据,而不仅仅是最小值或最大值。
所以我的问题是:堆内存在 C++ 中是如何组织的?当我们读到“在堆上分配”我们想到了什么内存组织?
【问题讨论】:
-
C++ 没有“堆”或“栈”。 C++ 实现通常有一个堆和堆栈,但标准在谈论内存时甚至一次都没有使用这些术语,AFAICR。
-
堆是通用内存。 通常操作系统会将其拆分为每个应用程序的块。你可以访问你自己块中的任何内存,但访问其他内存,你会得到一个 SEGFAULT(为了安全)。内存使用
malloc保留(很多东西在内部使用malloc,比如new),使用realloc调整大小并使用free释放。如果您尝试分配比您的应用程序当前可用的内存更多的内存,操作系统通常会提供更多。有时这意味着扩展到硬盘驱动器而不是 RAM(“交换文件”),但有时只是没有剩余空间。 -
这篇文章是关于编程数据结构的。对于动态内存区域,请参阅动态内存分配。您是否点击了该链接?
-
堆不同于 my 实现
heap<typename>作为您的文章所指的数据结构。您链接中的第一句话是这样说的。
标签: c++ memory heap heap-memory