静态变量存储在哪个区变量在内存的不同区域介绍静态变量通常存储在哪个区




静态变量存储在哪个区变量在内存的不同区域介绍静态变量通常存储在哪个区

2022-07-21 2:24:38 网络知识 官方管理员

静态变量存储在哪个区(变量在内存的不同区域介绍)(1)

计算机内存一般分为代码区和数据区:

  • 代码区:存放程序代码
  • 数据区:存放程序编译和运行过程中的常量变量

数据区包括:文字常量区、静态数据区、堆区、栈区。

1、文字常量区

存放常量,如字符串常量。

char*p="china";//指针p指向常量区的"china"

常量区存放的数据一旦初始化就不能修改。在编译时分配,程序运行结束后由系统释放;

2、静态数据区

存放全局变量和静态变量(用static声明的变量)。初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。在编译时分配,一直保存到被新的数据覆盖或进程退出。

静态变量存储在哪个区(变量在内存的不同区域介绍)(2)

3、堆区

存放局部变量、函数参数、函数入口地址等,主要存放临时数据。由编译器分配和释放,变量的有效性会随程序运行而改变,如函数执行完后,该函数中的局部变量就被踢出栈。

4、栈区

由程序员分配管理,通过malloc申请内存,通过free释放。如果忘记释放,就会造成这片区域一直无法访问,造成内存泄漏。程序退出后,系统会自动回收。

下面通过一段代码来介绍:

静态变量存储在哪个区(变量在内存的不同区域介绍)(3)

这里需要注意的是,“free(s)”释放的是指针变量s所指向的内存,而不是指针变量s本身。

指针变量s并没有被释放,仍然指向原来的存储空间,但现在指针指向的这块内存是不合法的,称为“野指针”。

因此,在释放内存后,必须把指针指向NULL,防止指针在后面不小心又被引用了。


发表评论:

最近发表
网站分类
标签列表