C语言中变量的内存分配以及内存分配的类型详解

3 篇文章 2 订阅
3 篇文章 3 订阅


内存分配的类型

C / C++中内存分为五个区:

  1. 栈区
  2. 堆区
  3. 全局/静态存储区
  4. 常量存储区
  5. 代码区

内存的分配有静态和动态之分:

  1. 静态内存分配:编译时分配。

    全局变量、静态全局变量、静态局部变量。

  2. 动态内存分配:运行时分配。

    局部变量、存放在程序员手动malloc出的堆区空间中的变量。


变量的内存分配

栈区 [stack]:编译器在需要的时候分配,不需要时自动清除的变量所在的储存区。

如函数执行时,函数的形参以及函数内的局部变量分配在栈区。
函数运行结束后,形参和局部变量去栈(自动释放)。
栈内存分配运算内置与处理器的指令集中,效率高但是分配的内存空间有限。

堆区 [heap]:由程序员手动分配释放的储存区。

如果程序员不释放这块内存,内存将一直被占用,直到程序运行结束由系统自动收回。
C语言中使用malloc free申请和释放空间。

静态储存区 [static]:初始化的全局变量静态变量存储在该区域。

全局变量静态变量的储存是放在一块的。
这块空间当程序运行结束后由系统释放。

常量储存区 [const]:常量字符串const修饰的全局变量储存在常量区。

"ABC"字符串就储存在常量区,储存在常量区的只读不可写。
const修饰的局部变量依然在栈上。

程序代码区:存放源程序的二进制代码。


总结

变量

变量分配时机内存区
局部变量运行时栈区
程序员手动malloc的堆区空间运行时堆区
全局变量编译时静态存储区
静态全局变量编译时静态存储区
静态局部变量编译时静态存储区

常量

常量内存区
常量字符串常量存储区
const修饰的全局变量常量存储区
const修饰的局部变量栈区
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值