关于C++的变量类型和内存存储

根据变量定义的位置可以分为:

  • 全局变量,is指定义在函数体外部的变量,能被所有函数使用。
  • 局部变量,is指定义在函数或附和语句中的变量,只能在函数或附和语句中使用。

变量的作用域scope,is变量的有效范围。变量有4种不同的作用域:①文件作用域 file scope(全局);②函数作用域 function scope;③块作用域 block scope;④函数原型作用域 function prototype scope。


变量的存储类型

变量的类型,is指变量在内存中的存储方法,分为静态存储和动态存储,具体分为:

①自动型 auto

auto说明符,定义的是一个局部变量。局部变量,如果不加关键字static加以声明,编译系统对其进行动态分配存储空间。局部变量的默认存储类型为auto。

②寄存器型 register

将频繁使用的局部变量存放到CPU的寄存器中,不用反复存取内存耗费时间,用关键字register声明。但现今的编译系统能够识别频繁使用的局部变量,自动将其存放到CPU的寄存器中,所以实际上不用register声明变量。

③外部型 extern

对所有模块共同使用的全局变量,在所有模块中都定义,连接时会出错。因此,在一个模块中定义该全局变量,在其他模块中使用关键字extern来声明其是一个“外来”的全局变量(外部型变量声明)。

extern 数据类型 标识符

  • 标识符,可以是变量名or函数原型。

外部型变量也可用于同一个文件中全局变量的提前引用声明。

④静态型 static

将函数声明为static变量:将某些变量在该函数调用结束后仍然存放在内存中,可被下次调用时继续使用。static说明符也可以用于声明外部变量。

static 数据类型 变量名=初值;

static可以声明:①全局静态变量:只能供本模块使用,不能被其他模块再声明为extern变量。②局部静态变量:is局部变量(作用域内存取)+全局变量(变量值只初始化一次)=供函数局部存取的全局变量。


根据变量的定义位置(全局or局部)and存储类型(静态or动态),可以知道变量的作用域and存储期/生命周期 storage duration,表明变量的类型。


变量在内存中的存储

C++程序的内存通常分为5各区:

①全局数据区 data area

 存放:全局变量 静态变量 全局常变量     

周期:程序加载/运行时分配,运行完释放

②代码区 code area

存放:程序运行的函数     

周期:程序加载时分配,运行完释放

③栈区 stack area

存放:局部变量 函数参数 程序返回地址     

周期:程序运行过程中,e.g:函数调用时建立,调用完释放

④堆区 heap area

存放:new产生的对象     

周期:用户程序中用new分配,用delete释放

⑤字符串常量区

存放:字符串常量     

周期:程序运行过程中生成,程序运行完成后释放

  • 一般常量/非常常量(除字符串常量)是一个“立即数”,在程序代码中。
  • 局部常变量(除字符串常量)与局部变量同等看待。
  • 全局变量、静态变量与常量的存储很难细分,可以统称全局数据区。
  • 堆空间,即使指向堆空间的指针变量消失,new语句分配的空间也不会消失,需由delete语句释放。

变量的生存期,is从产生到消失的时期。

  • 静态生存期:整个程序的生存期(全局变量/全局常变量/静态变量/字符串常量)。
  • 动态生存期:起于函数调用,结束于函数调用结束(局部变量)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值