【C/C++学习笔记】--6.C语言内存分配---堆、栈、全局、静态存储区的区别

1.栈区 stack

  • 保存局部变量和局部函数。当函数结束时,其局部变量和参数的生命随之结束(不包括static变量)。由系统释放
  • 函数被调用时需要push压栈,函数结束时需要pop弹栈。
  • 栈是一块连续的区域,其大小在编译时就确定的常数。

2.堆区 heap  动态内存分配区

  • 由程序员向系统申请和释放,通过malloc、new和free、delete
  • 堆是不连续的区域,各区域由链表串联起来的内存空间叫堆。

3.静态存储区

  • 指的是内存在编译时已经分配好,这块内存在整个程序运行阶段都存在。
  • 主要存放静态数据、常量、全局数据

 

与存储类型相关的几个属性:

atuo:在声明局部变量时,若不指定 static,默认均是 auto,这类变量都是动态分配存储空间的,数据存储在动态存储区中。
static:在声明局部变量时,使用关键字 static 将局部变量指定为“静态局部变量”,这样在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值。
register:在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存)
extern:用于扩展全局变量的作用域,比如如果函数想引用一个外部变量,但该外部变量在该函数后定义,那么这个函数需要使用 extern 来声明变量,这样才能使用在该函数后面定义的全局变量。此外,extern 还可以在多文件的程序中声明外部变量。

 

参考:https://www.cnblogs.com/simonLiang/p/5729649.html  栈、堆、静态存储区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值