变量的储存方式

简介: 变量的储存方式

一 动态存储方式与静态储存方式

    按变量的生存期来区分,变量有动态存储方式和静态存储方式两种类型。其中全局变量全部存放在静态存储区中,而函数形式参数、自动变量、函数调用时的现场保护和返回地址存放在动态存储区中。

二 局部变量的存储类别

1 自动变量(auto变量)

函数中的局部变量(不包括static存储类别)都是动态的分配存储空间的,数据存储在动态存储区的。在调用该函数时,系统会自动给这些变量分配存储空间,在函数调用结束时就自动释放存储空间,因此这种局部变量被称为自动变量。

关键字auto可以省略不写,并且程序中大多数变量都属于自动变量。

2 静态局部变量(static局部变量)

 有时候希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的内存单元不释放,在下一次调用该函数时,该变量已经有值,这时该变量就被称为静态局部变量。

下面用代码来直观的表示静态局部变量的特点:


763539e3804d4c67a5ffd47dc4640e37.png

说明:

  1. 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行的期间都不会释放。而自动变量(即动态局部变量)属于动态存储类别,分配在动态存储区空间而不在静态存储区空间,函数调用结束后即释放。
  2. 静态局部变量不能被其他函数引用,因为它是局部变量。
  3. 静态局部变量在函数内是可见与存在的,在函数外是存在的,但是不可见。
  4. 静态存储要多占内存,而且降低了程序的可读性,因此若非必要,不要多用静态局部变量。

另外,再向大家分享一个题目,输出1到10的阶乘值。这个题的方法很多,在这儿我就用一种方法来实现,话不多说,直接上代码。

cfc9c2a0da7d4b37ab70f4e1bd74af08.png

   当i=1时,a=1,返回数值1;当i=2时,由于a是static变量,程序运行时不会释放a的空间,a=1✘2,返回数值2;当i=3时,a=1✘2✘3=6,返回数值6;后面依次类推。

3 寄存器变量(register变量)

  如果有一些变量使用频繁,则为存取变量的值要花很多时间,为提高其执行效率,允许将局部变量的值放在CPU的寄存器中,需要时直接从寄存器取出参加运算,不必再到内存中去取,大大的提高了程序的执行效率,这种变量就叫做寄存器变量。

三 全局变量的存储类别

1 在一个文件内扩展外部变量的作用域

调用函数 ,求3个整数中的最大值:


c417bfb812004cb29dffd44670007d1f.png

由于a,b,c定义在max函数前面,该函数就不需要有参数传递了,因为max函数可以直接使用外部变量a,b,c的值

2 将外部变量的作用域扩展到其他文件

文件1中:

6e5ad300d4564e158702413acd875ca9.png

文件2中:

8e67fea6ceb644aba8e6d6cef051f163.png

3 将外部变量的作用域限制在本文件中

在定义外部变量时在前面加一个static声明,这种变量就叫做静态外部变量,这种变量在整个执行期间不释放,其所分配的空间始终存在,它的作用域只限于本文件模块。

总结

a3485e7f244a4d01b617cf49994105dd.jpg


好了 ,今天的分享就到了这里了,希望大家能提出些建议,一起共同进步。

 

目录
相关文章
|
算法 Java 编译器
【C++ 14新特性 】C++14 数字分隔符:深入理解与实践
【C++ 14新特性 】C++14 数字分隔符:深入理解与实践
484 2
|
存储
Rockchip系列之浅度分析LED状态灯 Driver篇(1)
Rockchip系列之浅度分析LED状态灯 Driver篇(1)
405 2
|
关系型数据库 数据库 PostgreSQL
|
存储 Kubernetes 调度
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
4762 1
|
10月前
|
编解码 数据可视化 数据挖掘
matplotlib绘制三维曲面图时遇到的问题及解决方法
本文详细介绍了在使用Matplotlib绘制三维曲面图时可能遇到的问题及其解决方法。从数据维度匹配到颜色映射,从图形显示到保存,涵盖了常见的各种情况。通过正确处理这些问题,可以确保生成高质量的三维可视化图形,为数据分析和展示提供有力支持。希望本文对您在使用Matplotlib进行三维绘图时有所帮助。
405 0
|
存储 Linux Docker
Docker 修改镜像存储位置(WSL2)
Docker 修改镜像存储位置(WSL2)
332 0
|
存储 安全 程序员
C语言内存四区详解
C语言内存四区详解
744 0
|
消息中间件 存储 缓存
【多线程系列-01】深入理解进程、线程和CPU之间的关系
【多线程系列-01】深入理解进程、线程和CPU之间的关系
34143 14
|
存储 编译器 C语言
RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储
RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储
1041 0
|
云安全 人工智能 Cloud Native
阿里云ACP认证有什么用?该怎么备考?
近些年全球化进程加快,越来越多的企业转型上云,这也带来了云计算人才大量缺失的情局面,而后阿里云推出了人才认证系统,不断为行业输送人才。
853 0
阿里云ACP认证有什么用?该怎么备考?