C/C++内存分配方式以及存储分区

动态内存分配是指在程序运行时为程序中的变量分配内存空间,其完全由应用程序自己进行内存的分配和回收。然后内存分配方式并不是唯一的,内存分配方式包括以下3中:

1.从静态存储区域分配内存

程序在编译时就已经把该程序所占用的内存分配好了,并且该内存在整个程序的运行过程中一直是有效的,例如存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放该内存。

2.在堆栈上分配

在函数执行的这段时间,函数内部的局部变量的存储单元都创建在堆栈上,函数结束时存储单元被自动释放。

在堆栈上分配内存的缺点是堆栈内存分配运算内置于处理器的指令集中,效率高,并且一般不会存在失败的危险。但分配的内存容量有限,可能会发生堆栈溢出的情况。

在堆栈上分配内存的优点是在堆栈中分配内存可以避免或减少内存碎片的产生。

3.动态内存分配

动态数据区一般就是“堆”和“栈”,并且“堆”和“栈”是两种不同的动态数据区。

栈(stack)是一种线性结构。由编译器自动分配释放。栈是用来存放函数的参数值、局部变量、本地变量的值等。其操作方式类似于数据结构中的栈。

堆(heap)是一种链式结构。一般由程序员分配释放,否则会造成内存泄露。注意它与数据结构中的堆是两个完全不同的概念。

以上是内存的分配方式。

C/C++通常可以把内存理解成4个分区:栈、堆、全局/静态存储区以及常量存储区。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值