变量在内存中如何存放c语言,c语言程序中用来存储变量的三种内存

c语言程序中变量存储在三种类型的内存中:栈内存、堆内存、数据段内存

一.栈内存,用来存储程序中各个函数的局部变量(动态局部变量),特点:

1.不用程序员手动申请和释放内存,由编译系统自动分配与释放;

2.内存是脏的,内存中内容是随机的,如果在定义局部变量时未显式初始化该变量,则变量的值是不确定的;

3.栈内存的生长模式是向下生长的(高地址向低地址),且变量存储与取出时遵循先进后出的原则;

4.栈的大小是操作系统事先指定的,所以当定义的局部变量达到一定数量后就会发生栈溢出现象。

二.堆内存,要靠程序员通过malloc和free接口手动申请和释放的大片内存空间,特点:

1.需要程序员手动申请和释放;

2.内存也是脏的,使用前需要初始化内存(清零);

3.堆内存是向上生长的(低地址到高地址);

4.使用完记得要手动释放(free),否则会发生内存泄漏事件。

三.数据段,用来存储全局变量和静态局部变量的内存段,特点:

被显式初始化为非0的全局变量以及静态局部变量都存储在数据段中,而未被显式初始化或被显式初始化为0的全局变量以及静态局部变量也存储在数据段,只不过该段数据段比较特殊,有一个别名,叫bss段,又叫ZI(zero initial)段。

那么要定义一个变量时,该如何选择存储它的内存类型呢?

函数内部临时使用,出了函数不会用到,就定义局部变量;堆内存和数据段几乎拥有完全相同的属性,大部分时候是可以完全替换的,但是生命周期不一:堆内存的生命周期是从malloc开始到free结束,而全局变量是从整个程序一开始执行就开始, 直到整个程序结束才会消灭,伴随程序运行的一生。启示:如果你这个变量只是在程序的一个阶段有用,用完就不用了,就适合用堆内存;如果这个变量本身和程序是一生相伴的,那就适合用全局变量。(堆内存就好象租房、数据段就好象买房。堆内存就好象图书馆借书,数据段就好象自己书店买书)你以后会慢慢发现:买不如租,堆内存的使用比全局变量广泛。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值