内存中的栈与堆与静态存储区与代码区

一个程序,是存在硬盘上的。当你运行它时,需要将它拷贝入内存中才能运行。在内存中分别存放在栈区,堆区,静态存储区,代码区。
首先着重说明,不存在常量区(它在静态存储区内)或是文字常量区(Java或许有?),或是自由存储区(存在但是是抽象的)。

  1. 栈区存放局部变量,它处于内存中的高地址范围,每存入一个变量,就好似向栈中压入一个变量一样,即高地址向低地址生长。它的资源由编译器分配与释放,由于它在内存中是连续的,所以存释效率高
  2. 堆区存放局部变量,关键在于存放的是需要程序员手动分配与释放的变量,通过malloc/free©或者new/delete(C++)。这里后者其实存储在的是自由存储区,但free store是个抽象概念将其归入堆中不全对但也无大错(我可能会写一篇关于这个的文章)。堆区位于内存中的低地址区范围,像链表一样存入一个个malloc或者new的对象,即低地址向高地址生长,由于它在内存中可以不是连续的,所以存释效率低
  3. 静态存储区存放静态变量、全局变量与常量,它在内存中的位置位于堆下面。在C中静态存储区还分为初始化的和未初始化的区分别存放相应的变量(当然常量存放在初始化的区了)。在C++中没这种区分,直接就都存了。C++中这个区甚至可以存new出来的对象,所以说new出
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值