我刚才听说过,C ++有两种内存块,可以在运行时分配和解除分配。据说,“malloc”和“free”使用名为 Free Memory Space ,“new”和“delete”的内存使用堆。
嗯,我想知道Free Memory Space和Heap之间的区别是什么?
C ++的 operator new 的底层实现是否依赖于C的malloc?
如果“new”和“malloc”使用不同的内存块,那么编译器是否有必要为这两种块(分别)保留一定量的内存以防止由“new”分配的内存和“malloc”从重叠分配的内存?
答案 0 :(得分:0)
从内部分配内存是依赖于实现和库。 C ++语言没有指定它。
负责malloc / free和new / delete使用的低级别分配的底层库通常(如果不总是)相同。
由它分配的内存通常来自heap
或使用mmap
。
答案 1 :(得分:0)
new和malloc最终都会从内核请求内存块,因此没有“特定内存区域”,而另一个内存块则无法使用。 但是,当您使用delete或free释放内存时,代码需要进行一些检查并正确地将块释放回内核。
差异来自会计。例如,一个问题是如何处理非常小的分配。即你不想只是为了存储bool而请求内核内存块。有一些优化,以便有效地工作,并且malloc和new之间的优化是不同的。