【发布时间】:2015-05-01 10:30:57
【问题描述】:
在C++中,可以operator new如何保存一块内存被分配的信息? AFAIK,它不能在恒定时间内工作,并且必须在堆中搜索空闲内存。或者,也许不是关于 C++,而是关于 OS?
附:不知道是不是标准规定的,是OS管理的还是C++管理的,具体怎么实现呢?
【问题讨论】:
-
new如何分配内存是编译器供应商的实现细节。一些new实现在内部使用malloc(),有些则没有。但很少有人直接进入操作系统,通常在两者之间有一个运行时库,管理内存分配(除其他外)。代码不应该关心方式或其他方式。它要求编译器new一些内存,并得到一个指针作为回报。如何管理内存由编译器决定。 -
我认为 C++ 语言标准没有定义它,但最简单的方法是多分配几个字节,并在其中存储下一个可用内存块的地址(所以堆通常实现为链表)。
-
由操作系统完成的内存管理。
-
简短的回答是它很可能不会这样做。内存管理器主要跟踪可用于分配的内存块。当前分配的块只是从其可用块列表中删除。当您调用
delete时,该块被添加回空闲列表。 -
@Juergen 操作系统没有理由不能管理小内存块;我实际上使用了一种 C 实现,其中
malloc和free只是对操作系统的请求。然而,大多数人不能非常有效地做到这一点,因此出于效率原因,malloc和free通常从大的进程内存块中分配。除非你要求很大的东西;malloc直接进入操作系统获取几兆的情况并不少见。
标签: c++ memory new-operator