静态局部变量

静态局部变量有以下特点:
    (1)该变量在全局数据区分配内存;
    (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

时间: 2024-12-14 18:50:42

静态局部变量的相关文章

C/C++语言变量问题(全局变量、局部变量、静态全局变量、静态局部变量)

1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的

C语言中的静态局部变量

代码: 1 0x601070 0x7ffcf44243fc 2 0x60106c 3 1 4 0x60106c 5 2 6 0x60106c 7 3 8 [[email protected] test]$ cat test.cpp 9 #include <iostream> 10 #include <string> 11 #include <cstdio> 12 13 using namespace std; 14 15 void func(){ 16 static i

静态局部变量(面向过程的static关键字)

对于一个完整的程序,在内存中的分布情况如下图: 一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区.自动变量一般会随函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区.全局数据区的数据并不会因为函数的退出而释放空间. 静态局部变量 在局部变量前,加上关键字static,该变量被定义成为一个静态局部变量. 我们先举一个静态局部变量的例子,如下: 1 #include<iostream> 2 using namespace std; 3 4 vo

全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别

一.程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变

通过静态局部变量看C,C++,C#,Java,PHP的特点

0 问题由来 对这个问题的思考来自于面向对象设计中的单例设计模式的实现. C++中单例模式实现标准代码为: #include <stdio.h> int init() { printf("init()\n"); return 22; } int GetTheOnly() { static int x = init(); return x; } int main() { int only = GetTheOnly(); return 0; } 在获取实例函数GetTheOnl

局部变量的存储类别--自动变量与静态局部变量

1.自动变量  auto 动态的分配存储空间,在函数调用结束后,就自动释放这些存储空间. 2.静态局部变量 static 即在函数调用结束后继续保留原值,占有的存储单元并不释放,在下一次调用该函数时,该变量已经有值. (若没有声明为static类别,则默认为auto类别) 具体区别,通过下面这段代码来理解: 1 #include<stdio.h> 2 3 int fun(int x) 4 { 5 int a=0; 6 static int b=3; 7 a++; 8 b++; 9 return

局部变量 静态局部变量 全局变量与静态局部变量

基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. 栈(stack):先进后出.C语言中局部变量就分配在栈中. 局部变量 普通的局部变量定义的时候直接定义或者在前面加上auto void func1(void){ int i = 1;  i++;  printf("i = %d.\n", i);}局部变量i的解析:在连续三次调用func1中

C++中的全局变量、普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量.局部变量和静态局部变量的区别.本博客从变量存储特性和标识符作用域两个角度区分这三个变量. 首先,我们来看看C++程序的内存区域是如何分配的. 从上图,我们可以看到,C++程序的内存区域分为代码区.全局数据区.堆区和栈区.其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了.而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除. 其次,从标识符作用域的角度,我们可以认为: 1. 全局变量和静

深入理解函数内静态局部变量初始化

函数内部的静态局部变量的初始化是在函数第一次调用时执行; 在之后的调用中不会对其初始化. 在多线程环境下,仍能够保证静态局部变量被安全地初始化,并只初始化一次.下面通过代码来分析一些具体的细节: void foo() { static Bar bar; // ... } 通过观察 gcc 4.8.3 为上述代码生成的汇编代码, 我们可以看到编译器生成了具有如下语义的代码: void foo() { if ((guard_for_bar & 0xff) == 0) { if (__cxa_guar