堆和栈的区别

内存中的‘堆’和‘栈’

我们主要讲内存上的堆区和栈区,数据结构中的堆和栈不作分析

理解:
  • 栈区:栈上分配的内存空间是连续的,主要用来存放函数内部的局部变量以及函数参数等,栈由操作系统自动分配,自动释放,生命周期很短,函数调用完,栈就会立马被释放,且栈中不宜存放大量数据,可能会出现栈溢出的问题。
  • 堆区:一般由程序员手动分配空间手动释放,在C语言中用malloc,realloc,calloc函数来开辟动态内存空间,在Java中用new关键字来开辟,C语言中用free()手动释放空间后,要记得对指向该内存空间的指针置空,不然会出现野指针(上一篇博客有详解)的问题,若程序员不释放,事后可能会由操作系统回收(最好还是自己手动释放,以免引起不必要的问题),Java中有垃圾回收机制。
  • 全局区(.data和.bss):存放全局变量以及static修饰的静态变量,分为已初始化数据和未初始化数据,程序结束时就会被释放,全局变量和局部静态变量数据经常放在数据端(.data),未初始化的全局变量和静态变量一般放在叫(.bss)段里
  • 只读常量区:常量字符串就是放在这里的,程序结束时被释放
  • 代码区(.text):存放程序源代码编译后的机器指令
图解:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值