Static variable
Encyclopedia
In computer programming
, a static variable is a variable
that has been allocated statically
— whose lifetime
extends across the entire run of the program. This is in contrast to the more ephemeral automatic variables (local variables), whose storage is allocated and deallocated on the call stack
; and in contrast to objects whose storage is dynamically allocated.
In many programming languages, such as Pascal
, all local variable
s are automatic and all global variable
s are allocated statically. In these languages, the term "static variable" is generally not used, since "local" and "global" suffice to cover all the possibilities.
Static variables are global, and in languages that do make the distinction between global and static variables, both are typically allocated without any distinction within the compiled code.
In the C programming language, the function of static variables can be illustrated as such:
(and its close descendants such as C++
and Objective-C
),
controlling both lifetime (as discussed above) and linkage
(visibility). To be precise,
In these languages, the term "static variable" has two meanings which are easy to confuse:
Variables with storage class
As well as specifying static lifetime, declaring a variable as
Computer programming
Computer programming is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs. This source code is written in one or more programming languages. The purpose of programming is to create a program that performs specific operations or exhibits a...
, a static variable is a variable
Variable (programming)
In computer programming, a variable is a symbolic name given to some known or unknown quantity or information, for the purpose of allowing the name to be used independently of the information it represents...
that has been allocated statically
Static memory allocation
Static memory allocation refers to the process of allocating memory at compile-time before the associated program is executed, unlike dynamic memory allocation or automatic memory allocation where memory is allocated as required at run-time....
— whose lifetime
Object lifetime
In computer science, the object lifetime of an object in object-oriented programming is the time between an object's creation till the object is no longer used, and is destructed or freed.In object-oriented programming , the meaning of creating objects is far more subtle than simple...
extends across the entire run of the program. This is in contrast to the more ephemeral automatic variables (local variables), whose storage is allocated and deallocated on the call stack
Call stack
In computer science, a call stack is a stack data structure that stores information about the active subroutines of a computer program. This kind of stack is also known as an execution stack, control stack, run-time stack, or machine stack, and is often shortened to just "the stack"...
; and in contrast to objects whose storage is dynamically allocated.
In many programming languages, such as Pascal
Pascal (programming language)
Pascal is an influential imperative and procedural programming language, designed in 1968/9 and published in 1970 by Niklaus Wirth as a small and efficient language intended to encourage good programming practices using structured programming and data structuring.A derivative known as Object Pascal...
, all local variable
Local variable
In computer science, a local variable is a variable that is given local scope. Such a variable is accessible only from the function or block in which it is declared. In programming languages with only two levels of visibility, local variables are contrasted with global variables...
s are automatic and all global variable
Global variable
In computer programming, a global variable is a variable that is accessible in every scope . Interaction mechanisms with global variables are called global environment mechanisms...
s are allocated statically. In these languages, the term "static variable" is generally not used, since "local" and "global" suffice to cover all the possibilities.
Static variables are global, and in languages that do make the distinction between global and static variables, both are typically allocated without any distinction within the compiled code.
In the C programming language, the function of static variables can be illustrated as such:
C and related languages
In the C programming languageC (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
(and its close descendants such as C++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
and Objective-C
Objective-C
Objective-C is a reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.Today, it is used primarily on Apple's Mac OS X and iOS: two environments derived from the OpenStep standard, though not compliant with it...
),
static
is a reserved wordReserved word
Reserved words are one type of grammatical construct in programming languages. These words have special meaning within the language and are predefined in the language’s formal specifications...
controlling both lifetime (as discussed above) and linkage
Linkage (software)
In programming languages, particularly C++, linkage describes how names can or can not refer to the same entity throughout the whole program or one single translation unit....
(visibility). To be precise,
static
is a storage class (not to be confused with classes in object-oriented programming), as are extern
, auto
and register
(which are also reserved words). Every variable and function has one of these storage classes; if a declaration does not specify the storage class, a context-dependent default is used (eg., extern
for all top-level declarations in a source file; auto
for variables declared in function bodies).
Storage class | Lifetime | Linkage |
---|---|---|
extern |
static | external (whole program) |
static |
static | internal (translation unit Translation unit (programming) In C programming language terminology, a translation unit is the ultimate input to a C compiler from which an object file gets generated.-Context:... only) |
auto , register |
function call | (none) |
In these languages, the term "static variable" has two meanings which are easy to confuse:
- (Language-independent) A variable with the same lifetime as the program, as described above; or
- (C-family-specific) A variable declared with storage class
static
Variables with storage class
extern
, which include variables declared at top level without an explicit storage class, are "static" in the first meaning but not the second.As well as specifying static lifetime, declaring a variable as
static
can have other effects depending on where the declaration occurs:
- Static global variables: variables declared as
static
at the top level of a source file (outside any function definitions) are only visible throughout that file ("file scopeScope (programming)In computer programming, scope is an enclosing context where values and expressions are associated. Various programming languages have various types of scopes. The type of scope determines what kind of entities it can contain and how it affects them—or semantics...
", also known as "internal linkage"). - Static local variables: variables declared as
static
inside a function are statically allocated while having the same scope as automatic local variables. Hence whatever values the function puts into its static local variables during one call will still be present when the function is called again. - static member variables: in C++C++C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
, member variables declared asstatic
inside class definitions are class variableClass variableIn object-oriented programming with classes, a class variable is a variable defined in a class of which a single copy exists, regardless of how many instances of the class exist.A class variable is the opposite of an instance variable...
s (shared between all class instances, as opposed to instance variableInstance variableIn object-oriented programming with classes, an instance variable is a variable defined in a class , for which each object of the class has a separate copy. They live in memory for the life of the object....
s).
See also
- Thread-local storageThread-local storageThread-local storage is a computer programming method that uses static or global memory local to a thread.This is sometimes needed because normally all threads in a process share the same address space, which is sometimes undesirable...
- Variable (programming)Variable (programming)In computer programming, a variable is a symbolic name given to some known or unknown quantity or information, for the purpose of allowing the name to be used independently of the information it represents...
, especially "Scope and extent"