内存中的堆和栈

         这里讲的堆和栈是指内存中的堆和栈,不是数据结构中的最大堆,最小堆,栈的概念。

         在编写的程序运行的时候,是放在内存中的。内存中的地址分配如下图

  

       堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个 char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。

       内存中的栈区处于较高的地址,以地址的增长方向为上的话,栈地址是向下增长的,是一块连续的内存的区域。栈顶的地址和栈的最大容量是系统预先规定好的,是一个编译时就确定的常数。栈是系统自动分配空间的,栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问,例如我们定义一个 char a;系统会自动在栈上为其开辟空间,由于是系统自动分配,速度较快。但程序员是无法控制的,而且只要栈的剩余空间大于所申请空间,很容易报异常提示栈溢出。

       在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值