静态变量

✍ dations ◷ 2025-06-09 06:00:25 #计算机编程,计算机科学,程序架构

静态变量(英语:Static Variable)在计算机编程领域指在程序执行前系统就为之静态分配(英语:Static memory allocation)(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

“静态变量”这一术语有两个容易混淆的定义:

而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取(对应“静态变量”),因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。一般来说,在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义(即定义2)。

静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

在C语言及由其派生出的C++与Objective-C等程序语言中,“static”是用于控制变量的生命周期和连接方式(即其作用域,亦即可见性)的保留字。确切来说,正如C族语言中的extern,auto与register这些保留字一样,static也是一种存储类(此处的“类”与面向对象语言的“类”的定义不同)标识。每个变量与函数都有以上的一种存储类标识,如果在声明(英语:Declaration (computer programming))中没有明确标识其存储类,编译时就会根据上下文来选择其默认存储类,如在源文件里的所有文件级变量对应的默认存储类是extern,而在函数体内的变量对应的则是auto,各存储类的属性如下表所列。

易见存储类为extern的变量(包括上面提到的未明确声明存储类的文件级变量)符合前段所述静态变量的定义1,但不符合定义2。

除明确标识出变量的生命周期(英语:Object lifetime)外,将变量声明为static存储类还会根据变量属性不同而有一些特殊的作用:

在C语言中,带有静态变量的程序如下所示:

#include <stdio.h>void func() {	static int x = 0; // 在对func的三次调用中,x只进行一次初始化	printf("%d\n", x); // 输出x的值	x = x + 1;}int main(int argc, char * const argv) {	func(); // 输出0	func(); // 输出1	func(); // 输出2	return 0;}

C++示例

在C++中,带有含私有静态内部变量的类的程序如下所示:

相关

  • 老年(英语:old age),一般指生物的生命周期一个阶段,即中年到死亡的一段时间不同的文化圈对于老年人有着不同的定义。由于生命的周期是一个渐变的过程,壮年到老年的分界线往往是很
  • 鞘脂类代谢鞘脂(英文:Sphingolipids或glycosylceramides),是一种含有鞘氨醇碱的骨架的脂类,是脂肪族胺醇包含鞘氨醇。他们在1870年代的脑部提取物被发现和神话斯芬克斯来命名。医学导航:遗传
  • 济安·贝尼尼吉安·洛伦佐·贝尼尼(意大利语:Gian Lorenzo Bernini;又名Giovanni Lorenzo Bernini,1598年12月7日-1680年11月28日),意大利雕塑家,建筑家,画家。早期杰出的巴洛克艺术家。贝尼尼主
  • 皮蒙特高原皮埃蒙特(英语:Piedmont)是美国的特指东部沿海至阿巴拉契亚山脉的一片丘陵地区,​​绵延自新泽西州至阿拉巴马州。“皮埃蒙特”一词源于法国,意指山脚下的地区,同样使用这词的还有
  • 热导管热导管,或称热管,是一种具有快速均温特性的特殊材料,其中空的金属管体,使其具有质轻的特点,而其快速均温的特性,则使其具有优异的热超导性能;热管的运用范围相当广泛,最早期运用于航
  • 捷1号作战捷号作战(しょうごうさくせん)是太平洋战争中日本大本营立案的作战计划之一。马里亚纳海战胜利的美军,在1944年7月9日,占领塞班岛。面临绝对国防圈被突破,7月24日,大本营策定‘陆
  • 睡眠相位后移综合征睡眠相位后移综合征(Delayed sleep-phase syndrome(Disorder),简称DSPS或DSPD)是一种慢性睡眠紊乱,患者一般都会晚睡晚起,生活节奏受严重影响。在临床诊断中,部分患者要到等至天亮
  • 独居长者独居长者,亦称独居老人,是指单身一人或夫妻二人孤独居住的老人,是现今社会问题之一。独居老人可能因没有后代而独居,也可能因为子女居住在他处而独居;属于后一种情况的老者在中国
  • VR战士5街机*JPN 2006年7月12日PlayStation 3*JPN 2007年2月8日Xbox 360*NA 2007年8月《VR战士5》(Virtua Fighter 5)是SEGA《VR战士》系列游戏的最新作品。2006年7月12日VR战士5在日
  • 杰氏非洲脂鲤杰氏非洲脂鲤为辐鳍鱼纲脂鲤目脂鲤亚目鲑脂鲤科的其中一种,为热带淡水鱼,被IUCN列为濒危保育类动物,分布于非洲维多利亚湖、马拉维湖、Nabugabo湖流域,本鱼体银色、背部蓝色,尾柄