自由存储区和堆的区

自由存储区和堆的区别是一个老生常谈的问题了,就像面试题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 @   atomxing  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示