static内存图
时间: 2023-07-23 13:19:02 浏览: 46
当我们在C/C++中定义一个static变量时,它会被存储在静态数据区中,也称为BSS段或者数据段。这个区域在程序编译时就已经被分配好了,因此这种变量在程序运行期间一直存在,并且只会被分配一次。
下面是一个示例代码和相应的内存图,用于说明静态变量的存储位置:
```c++
#include <stdio.h>
void func();
int main()
{
printf("In main():\n");
func();
func();
return 0;
}
void func()
{
static int count = 0; // 静态变量
int stack_var = 0; // 栈变量
printf("\tstack_var at %p\n", &stack_var); // 栈变量的内存地址
printf("\tstatic_var at %p\n", &count); // 静态变量的内存地址
count++; // 静态变量累加
return;
}
```
输出结果如下:
```
In main():
stack_var at 0x7ffcde14b1bc
static_var at 0x10c4e5010
stack_var at 0x7ffcde14b1bc
static_var at 0x10c4e5010
```
可以看到,每次调用函数`func()`时,栈变量的内存地址都是相同的,而静态变量的内存地址只被分配一次。对于静态变量`count`,它在程序运行期间一直存在,每次调用`func()`时都会累加其值。