c++ - malloc 和 new 是否相互了解?

标签 c++ heap-memory

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

char* block1 = malloc(5*1024); //allocate 5
char* block2 = new[](4*1024); // allocate 4

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

最佳答案

可能有也可能没有单独的 C 和 C++ 堆。您无法编写可以区分差异的符合标准的 C++ 程序,因此这完全取决于实现。

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

Executes a loop: Within the loop, the function first attempts to allocate the requested storage. Whether the attempt involves a call to the C standard library functions malloc or aligned_alloc is unspecified. [new.delete.single]/4.1.

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

所以意图是可以从operator new调用malloc,但这不是必需的。

在实践中,operator new 调用malloc

关于c++ - malloc 和 new 是否相互了解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776731/

相关文章:

c++ - 模板表达式如何摆脱临时变量

设置 Xms Xmx 时,Java Heap Space 不会增加,

java - java中可以有多个堆吗?

java - jmap/jhat 与 jVisualVM

c++ - 通过操纵 gl_FragDepth 将选定的线对象优先于其他对象

c++ - 从 int* 到 int& 的转换

c++ - 32 位或 64 位操作系统如何影响数据类型范围

c++ - std::this_thread::get_id 是否独立于线程的创建方式工作?

java - 仅分配 1 个数组时如何计算 JVM 的最小 MaxHeapSize?

c++ - 初始化 vector 时检查错误分配