什么叫做栈区,堆区,全局区,静态区,代码区,常量区,自由存储区?

4 篇文章 0 订阅

看了很多内存存储区文档的介绍,比较杂,自己搜集总结一下,要不总是忘,自己总要去搜索,去记。

C的内存基本上分为4部分:静态存储区、堆区、栈区以及常量区。他们的功能不同,对他们使用方式也就不同。

 在C++中内存分成5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区;

内存四区是指:栈区,堆区,全局区,代码区。

1:栈区(stack)?

栈区:就是那些由编译器在需要的时候分配,在不需要的时候自动清除变量的存储区。里面的变量通常是局部变量、函数参数等。特点:由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。

2:堆区(heap)?

堆区:用于动态内存分配。一般由程序员手动分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。此区域主要用来存放我们动态创建的对象、动态的申请的临时空间等。如程序在运行用malloc或new申请任意内存,程序员自己负责在何处用free或delete释放内存。该动态内存的生存期由我们决定。

3:数据区(data seg),也称为(静态区,全局区)

静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放。根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。const跟非const存储上没区别,只不过是read only的,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

4:代码区

代码区:就是存放你的程序的编译后的可执行代码的地方了,CPU执行的机器指令,并且是只读的。存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)。

5:常量存储区

常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

6:自由存储区

自由存储区:自由存储是C++中通过new与delete动态分配和释放对象的抽象概念自由存储不是一个概念。一般而言,自由存储是指CRT(C运行时库)通过malloc,free函数管理的内存。特指通过new,delete管理的内存。但是在部分编译器的实现上这两块内存都是同一种管理方式。但是在c++情况下是不区分的,自己找资料查询的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值