“堆”和“自由存储区”

来源:互联网 发布:xmt什么意思网络用语 编辑:IT博客网 时间:2019/11/21 17:29

“C/C++中的内存分为几个区?”

“通常分为5个区:堆、栈、自由存储区、全局/静态存储区、常量存储区”。

“堆和自由存储区有什么不同吗?”

...

书上通常这么说:malloc/free在堆上申请和释放内存,new/delete在自由存储区上申请和释放内存。


堆(heap)C语言和操作系统的术语,堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,调用free()归还内存。


自由存储区(free store)是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区,通过delete归还内存。


基本上,所有的C++编译器默认使用堆来实现自由存储,运算符new和delete内部默认是使用malloc和free的方式来被实现,这时藉由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。

说明:new和delete是运算符。

运算符可以重载,当new被程序员重载,且内部实现并非只有malloc()时,此时的内存空间就和堆不同了,这是一块组合的内存空间,C++中称为“自由存储区”,这是一个抽象的概念。

阅读全文
1 0