【C++】变量的存储位置

1、首先,讲下 “堆 heap” 和 “栈 stack” 的区别:

    一个由 c/c++编译过的程序占用的内存分为一下几个部分

    (1)、栈区 stack :由编译器自动分配释放,存放函数的参数值,局部变量的值等。这个栈的操作方式类似于数据结构中的栈。

    (2)、堆区 heap :一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式类似于链表。

    (3)、全局区(静态区)static : 全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量又放在相邻的另一块区域中。程序结束后由系统释放。

    (4)、文字常量区  : 常量字符串放在这里。程序结束后由系统释放。

    (5)、程序代码区 : 存放函数体的2进制代码。

根据变量的位置可以分为全局变量和局部变量

根据变量的静态属性可以分为静态变量和非静态变量。

根据变量的const属性可以分为const变量和非const变量。

针对上面的几种变量分类,变量的初始化分为以下几种:

全局变量和局部变量的不同主要体现在变量的作用范围上,全局变量的初始化分为两种,非类对象的变量的初始话发生在函数的编译阶段,如果我们没有显示的初始化,编译器会默认初始化,类类型的全局变量的初始化发生在程序运行阶段的Main函数之前。对于局部变量,不会执行默认初始化,因此在使用局部变量之前必须先进行变量的初始化。

静态变量和非静态变量的初始化:

静态变量的分类:静态变量根据其位置可以分为三种:全局静态变量、定义在函数中的静态变量以及定义在类中的静态变量。

静态变量的初始化:编译器要求不同,有的要求必须主动完成初始化,有的编译器会完成默认初始化,但是值不确定。所以,在使用静态变量的时候,我们一般要求必须在定义的同时完成初始化。对于g++编译器,如果静态变量是全局或者函数的局部变量,都会完成默认初始化。但是如果类包含静态数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值