c++(七)内存模型

一、存储连续性

定义:即数据不同的存储方式,决定的数据保留在内存中的时间。分四种:

自动存储:函数参数和函数内声明的变量。函数开始时执行,结束时内存被释放。

静态存储:函数外定义的变量,或用static修饰的变量,在程序运行中都存在。

线程存储:关键字thread_local声明,生命周期同所属线程

动态存储:使用new修饰的,直到delete或程序结束被释放

二、存储的链接性、作用域

定义:即数据在不同文件间的共享能力。

静态存储只有A全局变量能在不同文件共享。其他静态存储类别的作用域,只能是单个翻译单元或所声明的函数内。

自动存储的变量,作用域范围只是代码块内。没有链接性。

详细程序说明:

#include <iostream>

int global = 1000;//A.静态变量,外部链接性,整个文件中可用
extern int GLOBAL_VALUE;
static int one_file = 50;//B.静态变量,内部链接性,整个文件中可用

int main() {

    static int count = 0;//C.静态变量,无链接。函数没调用时就在内存里了
    int llama = 0;//D.自动变量,只能在代码快内使用,自动释放内存
    std::cout << GLOBAL_VALUE;

    return 0;
}

void fun1(){
    int r = global;
    int t = one_file;
}

注意:c++有单定义原则。定义全局变量后,其他文件定义重名的变量会报错,为了防止定义冲突,单个文件内的静态变量用static修饰即可。

三、说明符和限定符

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值