malloc和new彼此了解吗?

Xee*_*ych 3 c++ heap

假设我有10 kB的堆,并像这样混合使用C和C ++代码。

char* block1 = malloc(5*1024); //allocate 5
char* block2 = new[](4*1024); // allocate 4
Run Code Online (Sandbox Code Playgroud)

是否存在C堆和C ++堆,或者仅存在一个通用的堆?这样“新”知道堆的前5 kb已经分配了吗?

Pet*_*ker 6

可能有也可能没有单独的C和C ++堆。您不能编写一个能够说明差异的合格C ++程序,因此这完全取决于实现。

该标准描述了默认行为的第一步,operator new如下所示:

执行一个循环:在循环中,该函数首先尝试分配请求的存储。尝试是否涉及对C标准库函数malloc或aligned_alloc的调用均未指定。[new.delete.single] /4.1。

而对于malloc本身的标准说:“[ ,aligned_alloccallocmallocrealloc]不要试图通过调用来分配存储空间::operator new()” [c.malloc / 3。

因此,意图是,它可以调用mallocoperator new,但它不是必需的。

在实践中,operator new打电话malloc