当前位置: 首页 > news >正文

详解C++的存储区

在C++中,存储期(Storage Duration)是指变量或对象在内存中存在的时间长度。根据存储期的不同,C++中的变量可以分为以下几种类型:

  1. 自动存储期(Automatic Storage Duration)

    • 定义:自动存储期的变量是在函数内部定义的局部变量,不包括用static声明的局部变量。
    • 生命周期:从定义点开始,到包含它的代码块(通常是函数)结束时结束。每次函数被调用时,都会重新创建这些变量。
    • 示例
      void func() {
          int a = 10; // 自动存储期的变量
      }
      
  2. 静态存储期(Static Storage Duration)

    • 定义:静态存储期的变量在程序执行期间只被初始化一次,并在整个程序运行期间都存在。
    • 生命周期:从程序开始执行时开始,到程序结束时结束。
    • 分类
      • 全局变量:在函数外部定义的变量。
      • 静态局部变量:在函数内部用static关键字声明的变量。
      • 静态成员变量:在类中用static关键字声明的成员变量。
    • 示例
      int globalVar = 20; // 全局变量,静态存储期
      
      void func() {
          static int staticLocalVar = 30; // 静态局部变量,静态存储期
      }
      
      class MyClass {
      public:
          static int staticMemberVar; // 静态成员变量,静态存储期
      };
      
      int MyClass::staticMemberVar = 40;
      
  3. 线程存储期(Thread Storage Duration)

    • 定义:C++11引入,用于线程局部存储(Thread Local Storage,TLS),即每个线程都有自己的变量副本。
    • 生命周期:从线程开始执行时开始,到线程结束时结束。
    • 关键字:使用thread_local关键字声明。
    • 示例
      thread_local int threadLocalVar = 50; // 线程局部存储期的变量
      
  4. 动态存储期(Dynamic Storage Duration)

    • 定义:动态存储期的变量是通过动态内存分配(如使用new操作符)创建的,并且需要程序员显式地释放(如使用delete操作符)。
    • 生命周期:从使用new分配内存时开始,到使用delete释放内存时结束。
    • 示例
      void func() {
          int* dynamicVar = new int(60); // 动态存储期的变量
          // 使用dynamicVar
          delete dynamicVar; // 释放内存
      }
      

总结

  • 自动存储期:局部变量,每次函数调用时创建和销毁。
  • 静态存储期:全局变量、静态局部变量和静态成员变量,程序执行期间一直存在。
  • 线程存储期:每个线程有独立的变量副本,线程结束时销毁。
  • 动态存储期:通过new分配的内存,需要显式delete释放。

理解不同存储期的特点和用途对于编写高效、可靠的C++程序至关重要。

相关文章:

  • 在AMLOGIC android14 平台上使用adb
  • 如何在 MySQL 5.6 中实现按季度分组并找到销量最高的书籍
  • QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据
  • UE5中的快捷键汇总
  • 电源测试和测量系统的创新遥感方法可以消除哪些潜在问题
  • 土建施工员考试题库及答案
  • 在 CentOS 上更改 SSH 默认端口以提升服务器安全性
  • Django 初学小案例:用户登录
  • Windows搭建SVN本地服务器 + TortoiseSVN客户端
  • SQL Query美化
  • 单细胞学习(13)—— Seurat → Scanpy 分析流程
  • UnrealEngine开发无人机飞行模拟软件的手柄如何选择
  • JAVA生产环境(IDEA)排查死锁
  • Grafana Windows在 Windows 上轻松实现数据监控与可视化
  • VSCODE - 连接远程linux服务器,报错XHR failed 解决方法
  • C语言-------结构体(1)
  • 华宇TAS应用中间件与因朵科技多款产品完成兼容互认证
  • 内容中台驱动企业数字化内容管理高效协同架构
  • Spring框架中都用到了哪些设计模式?
  • 电商小程序(源码+文档+部署+讲解)
  • 常州新型碳材料集群产值近二千亿,请看《浪尖周报》第24期
  • 俄外长与美国务卿通电话,讨论俄美接触等问题
  • 2人恶意传播刘国梁谣言被处罚,媒体:以法律利剑劈谣斩邪,加快推进依法治体
  • 美国失去最后一个AAA评级,资产价格怎么走?美股或将触及天花板
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理