自由存储区和堆的区

自由存储区和堆的区别是一个老生常谈的问题了,就像面试题newmalloc的区别一样。事实上,网上多说人认为,自由存储区与堆的划分标准是申请和释放内存是使用的new/delete还是malloc/freeC++标准并没有给出new/delete应该如何实现,但很多编译器的new/delete都是以malloc/free为基础来实现的。从技术上来说,堆(heap)是C语言和操作系统的术语,堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,使用malloc()free()来申请/释放内存。而自由存储是C++中通过newdelete动态分配和释放对象的抽象概念。基本上,所有的C++编译器默认使用堆来实现自由存储。也就是说,默认的全局运算符newdelete也许会使用mallocfree的方式申请和释放存储空间,也就是说自由存储区就位于堆上。但程序员也可以通过重载操作符,改用其他内存来实现自由存储,例如全局变量做的对象池,这时自由存储区就不位于堆上了。

因此,我认为自由存储区和堆的区别是:堆是操作系统维护的一块内存,是一个物理概念,而自由存储是C++中通过newdelete动态分配和释放的对象的存储区,是一个逻辑概念。

PSC++内存布局:内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区

来自 https://blog.csdn.net/Cookey_July/article/details/81209352

posted @ 2022-08-30 21:18  atomxing  阅读(261)  评论(0编辑  收藏  举报