静态变量

✍ dations ◷ 2025-08-25 11:48:46 #计算机编程,计算机科学,程序架构

静态变量(英语: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++中,带有含私有静态内部变量的类的程序如下所示:

相关

  • 世俗世俗人文主义(英语:Secular humanism)是一种涵盖人类理智、伦理学和哲学意义上的自然主义的哲学或者人生观。世俗人文主义把宗教教义、超自然主义、伪科学和迷信排除在道德基础
  • dGDP去氧鸟苷二磷酸(Deoxyguanosine diphosphate;dGDP)是较为常见的核酸GTP之衍生物,比GTP少了一个位在五碳糖2号碳上的-OH基,含有两个磷酸基团。
  • 弗里德利布·费迪南德·龙格弗里德利布·费迪南德·龙格(德语:Friedlieb Ferdinand Runge,1794年2月8日-1867年3月25日),德国分析化学家。1819年在歌德的鼓励下,首次提炼了咖啡因。他也确认了颠茄提取物的瞳孔
  • 义大世界购物广场义大世界购物广场(E-DA Outlet Mall)位于台湾高雄市大树区,为义大世界的一部分,为台湾首座的名牌折扣商场(Outlet mall),营业面积广达约58,000坪,分为A区、B区、C区,超过700个品牌进
  • 木百灵板块木百灵板块(Woodlark Plate)是位于新畿内亚东半部的板块,加洛林板块沉入木百灵板块的北部边缘,木百灵板块的西部和南部是分别与毛克板块和澳洲板块形成的聚合板块边缘,东面与所罗
  • 洪成南洪成南(韩语:홍성남,1929年10月2日-2009年3月31日),出生于平安北道定州郡。前朝鲜总理。科学技术专家。历任化学工业部长、重工业部部长。1973年9月任副总理兼国家计划委员会委员
  • 轮岛轮岛市(日语:輪島市/わじまし Wajima shi */?)为石川县北部的一市,位于能登半岛最北端,面向日本海。以轮岛涂、朝市、御阵乘太鼓而闻名全日本。2006年2月1日,与相邻的门前町新设
  • abbr class=abbr title=S63: 意外吸入时,移动伤者至通风空气清新处并保持休息S63/abbr安全建议标准词(英语:Safety phrases,简写:S-phrases)是于《欧盟指导标准67/548/EEC 附录Ⅳ: 有关危险物品与其储备的安全建议》里定义。该列表被集中并再出版于指导标准2001/59/
  • 物理宇宙学物理宇宙学是天体物理学的分支,即宇宙学。它是研究宇宙大尺度结构和宇宙形成及演化等基本问题的学科。宇宙学的研究对象是天体运动和它的第一起因,在人类历史的很长一段时期曾
  • 普适计算普适计算(Ubiquitous computing(ubicomp)、pervasive computing),又称普存计算、普及计算、遍布式计算、泛在计算,是软件工程和计算机科学中的一个概念,其中的“计算”可以随时随地