静态储存,堆,栈的理解

数据结构中的堆与栈

:可以理解为为一个瓶子,他遵循着先进后出的原则
:是一种经过排序的树状结构,每一个节点都有一个值,我们通常说的堆是二叉堆,堆的特点是跟节点最大或者最小,且子节点也是一个堆,所以我们在使用的堆的时候,都是随便取一个节点,并没有什么顺序

内存的基本概述

栈: 编译器自动申请和自动释放的区域,存放函数的参数值,和一些局部变量,在windows 大小一般为1M,在linux下一般为8M
堆: 是由程序员手动申请和释放,但是他与数据结构的堆还是有区别的,他的分配类似于链表,大小接近4G
全局区(静态区):静态变量和全局变量是存储在一起的,他会伴随着程序结束才会被释放,.data()存放的已经初始化的全局变量,而.bss下存放的未被初始化的
文字常量区 :存放常量,如字符串常量
程序代码区 :存放程序的代码,并且是只读的

详解

在这里插入图片描述
上面的是一个详细的内存分布的图,我们可以看到各个内存的存放方式

  1. 栈(stack) :是从高地址向地址延深的,他处于最高的地方,他一般用在存储一些局部变量,模块结束后就自动的销毁,且他申请的空间是连续的,但是他的大小是有限的,只适合一小的变量
  2. 下面的就是堆,他是从低地址向高地址向低地址延深的,他是由程序员手动申请和释放的,他的管理类似一条链表,所以他的空间是不连续,过于频繁的释放和申请栈区变量,会产生大量的空间碎片,而导致程序运行缓慢
  3. 之后常量区(全部变量区),他会伴随着程序结束才会被释放
  4. 常量储存区: 他存放的是不可被修改的常量,通常用在那些编译期间就能确定大小的区域,并且他在程序运行期间是可见的
  5. 代码段:存放的程序执行的代码,其中代码段和已经初始化的静态变量在可执行文件中,其实也放有一些常量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值