C++-作用域和生命周期

变量类型及生命期

一个程序在其运行期间,它的程序代码和数据会被分别存储在4个不同的内存区域。
这里写图片描述
程序代码区:程序的各函数代码存放在此区域中;

全局数据区:程序的全局数据(如全局变量)和静态数据(static)存放在此区域中;此区域中的数据由C++编译器建立,对于定义时没有初始化的变量,系统会自动将其初始化为0。这个区域中的数据会一直保存,直到程序结束时才由系统负责回收。

栈区:程序的局部数据(在函数中定义的数据)存放在此区域中;需要注意static类型的局部变量存储在此。只有当函数被调用时,系统才在栈区中为它们分配存储空间,并且不会对分配的存储单元做初始化,一旦函数调用完成,系统就会回收这些变量在栈区中的存储单元。

堆区:程序的动态数据(new,malloc)就在此区域中分配存储空间;用完之后由程序员用delete或free将其归还给系统。

静态变量可分为静态全部变量和静态局部变量,前者的作用于是整个程序范围,后者的作用域局限于定义它的语句块。静态局部变量的作用域与普通局部变量的作用域是相同的,但它与全局变量有着同样的生命期。

变量初始化

未提供初始化的全局数据区中的变量将被系统自动初始化为0,堆和栈中的变量不被初始化。

局部变量与函数返回地址

当使用指针或引用从函数中返回一个地址时需要小心,一定不要返回局部变量的指针或引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值