C++ 内存模型和名称空间

一、存储的连续性

连续性:通俗来说,就是关于变量的创建与取消的管理方式,有的是自动创建自动释放,有的需要手动处理,有的变量产生后在程序运行时一直存在等。。。


数据的存储有不同的特征,创建与消失的长短随指定的方式不同,在C++11中有四种:分别是自动存储持续性、静态存储持续性、线程存储持续性、动态存储持续性。

第一种,自动存储持续性:执行程序时被创建,执行完毕时内存自动释放。如函数中定义声明的变量和函数参数。

第二种,静态存储连续性:程序运行整个过程都存在。如函数外定义的变量者使用static定义的变量。

第三种,线程存储连续性:本书没有讨论啊!

第四种,由new创建,程序结束时释放或者由delete释放。

二、作用域

直白的说:就是变量的使用范围

第一种作用域仅仅在函数内部,是局部的,随函数运行创建,随函数运行结束而释放内存。

第二种的作用域:使用关键字static 声明的变量,或者在函数外文件中声明的变量,


三、链接性

根据我的理解,就是在作用范围外能否调用本变量的能力,



四、其他

1.需要在多个文件中使用外部变量,可以在一个文件中定义,在其他文件中使用extern引用声明。

2.静态变量不一定非要用static,还可以在函数外进行的普通定义的变量

3.调用其他函数的外部变量,除了在本文件头部用extern声明外,还可以在函数内部同样声明,重复也没关系。

4.如果当前文件已经extern一个外部变量,某一代码块中定义了同名局部变量会自动覆盖外部变量,此时可以使用运算符调用外部变量::XXX,添加双冒号即可。

5.文件1头部int a=0;文件2头部int a=1;报错,违反单定义原则。外部变量名有重复(同一区域内不能有定义相同的变量)。

6.文件1头部int a=0;文件2头部static int a=1;正常,static将变量链接性限定为内部

7.将static限定符用于代码块中的变量时,变量只能在该代码块中使用,但是在代码块不活动时任然存在。


五、限定符和说明符

存储说明符:auto/register、static、extern、thread_local、mutable

在c++之前,auto用于指出变量是自动变量,但是C++11中,它用于自动类型推断。

C++之前,register用于在声明中指示寄存器存储,现在用于显示指出变量是自动的。

static两种用法,作用域为整个文件时,表示内部链接性,作用域为代码块时,表示为静态变量

extern表示外部变量的引用声明、

关键字thread_local指出变量的连续性和所属线程的连续性相同。


cv限定符:const与volatile











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值