21xrx.com
2024-11-09 00:19:07 Saturday
登录
文章检索 我的文章 写文章
C++静态变量的存储位置
2023-07-05 09:05:00 深夜i     --     --
C++ 静态变量 存储位置

C++中的静态变量是指在程序初始化时就分配内存空间的变量,它们的生命周期与整个程序的运行周期相同,而不是像局部变量那样仅在所属函数的执行期间存在。由于静态变量具有“全局性”,它们在内存中的存储位置也与其他全局变量不同。

对于一个静态变量来说,其存储位置主要有两种情况,即“全局存储区”和“静态存储区”。

对于处于全局作用域的静态变量,它们的存储位置是“全局存储区”。全局存储区是在程序编译时就分配的,并在整个程序的执行期间一直存在,直到程序结束。此类变量可以被任何函数或模块访问,因此需要使用关键字“extern”进行声明。如下所示:


#include <iostream>

using namespace std;

// 全局静态变量,存储于全局存储区

static int global_static_var = 100;

void func()

  cout << "global_static_var in func: " << global_static_var << endl;

int main(){

  func();

  return 0;

}

而对于局部作用域的静态变量,它们的存储位置是“静态存储区”。静态存储区是在程序编译时就分配的,并在整个程序的执行期间一直存在,而与函数或模块所处的栈内存不同。这类变量的生命周期与全局静态变量一样,但其作用范围仅限于所属函数或模块内。因此,静态局部变量不能被其他函数或模块访问。如下所示:


#include <iostream>

using namespace std;

void func(){

  // 静态局部变量,存储于静态存储区

  static int static_var = 100;

  static_var++;

  cout << "static_var in func: " << static_var << endl;

}

int main(){

  func();

  func();

  func();

  return 0;

}

在以上代码中,静态局部变量“static_var”在每次函数被调用时都会自增,并且在函数调用结束后不被销毁,而是继续存在于静态存储区中。

总的来说,静态变量与其他变量的存储位置有所不同。全局静态变量存储于全局存储区,而静态局部变量存储于静态存储区。了解静态变量的存储位置有助于程序员优化程序性能、理解内存管理及解决程序中的一些奇怪问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复