当前位置:首页 > 内存 > 正文

静态变量在哪个内存区

  • 内存
  • 2024-08-10 05:13:49
  • 2056

一、静态变量与非静态变量的区别

1.存储位置不同

静态变量:存储在全局数据区(静态数据区)。

非静态变量称为动态变量,存储在内存弹出数据区。

2.不同的有效期

动态变量:取决于您定义它们的位置。例如,如果您在函数中定义变量,那么一旦超出其范围,该变量就会失效。功能。

静态变量:仅在程序结束时释放。

3.范围不同

动态变量:与第二点类似,可以根据定义的位置来确定。

静态变量:在当前文件中有效。

详细说明;

静态变量的作用;

1.对于静态全局变量,源文件是静态的。因为声明的文件级变量和函数的作用域仅限于文件内(仅在文件内部可见),即内部链接,所以可以用来限制变量的作用域。

2.对于静态局部变量,在函数内静态声明的变量的作用域与自动局部变量的作用域相同(即作用域仅在函数内),但存储空间为静态分配,而不是通过分配自动获取的默认值。

因此,不同区域的存储是不同的(一般情况下,静态分配时,存储在编译时被划分为程序数据段,一次分配对整个进程有效。另外,使用自动分配时,存储空间是在调用堆栈上分配的,并且仅在调用期间分配和释放),因此两次调用之间的变量值始终一致。请注意,静态局部变量只能初始化一次,这是由编译器保证的。

3.对于静态成员变量,在C++中,在类定义中静态声明的成员变量属于类变量。也就是说,它们在所有类实例之间共享。。

参考来源;-静态变量

-动态变量


二、静态变量存储在哪个区进程的内存空间在逻辑上可以分为三部分:代码区、静态数据区、动态数据区。
动态数据区域通常是一个“堆栈”。栈是线性结构,栈是链式结构。进程的每个线程都有一个私有“堆栈”。
全局变量和静态变量分配在静态数据区(全局区),局部变量分配在动态数据区,即栈。程序通过栈的基地址和偏移量来访问局部变量。