精华内容
下载资源
问答
  • 生存期: 全局变量生存期和程序一致; 作用域为从声明处至程序结束; 动态局部变量: ...(是指语句块内声明的变量,包括函数形参) ...(指编译器为变量分配内存的方式,...作用域同动态局部变量生存期为整个程...

    生存期:

    全局变量:

    生存期和程序一致;

    作用域为从声明处至程序结束;

    动态局部变量:

    (是指语句块内声明的变量,包括函数形参)

    从声明到代码块的右大括号;

     

    储存类型:

    (指编译器为变量分配内存的方式,决定变量的生存期)

    auto-----自动变量(default):

    动态变量。

    初始化默认为0。

    static----静态变量:

    作用域同动态局部变量,生存期为整个程序运行期间。

    静态变量只初始化一次,变量的值可保存到下次进入函数再继续调用,使函数具有记忆功能。

    初始化默认为0。

    extern---外部变量:

    声明点之前使用时用extern声明。

    register-寄存器变量:

    CPU内部容量有限,但速度极快的变量。

    现代编辑器有能力将auto优化为register,无需用户指定。

    储存方式:

    静态~:存储于RAM中的静态储存区,此区中的变量与程序共存亡

    动态~:存储于RAM中的动态储存区,此区中的变量与所在语句块共存亡

    寄存器~:存储于CPU中的寄存器,同动态储存区

    展开全文
  • 目录1 变量生存期和作用域2 默认初始化规则(C++11) 1 变量生存期和作用域 变量的储存方式:动态储存(自动、寄存器)、静态储存(静态和外部) 储存方式 名称 自动变量 anto 寄存器变量 register ...

    1 变量的生存期和作用域

    • 变量的储存方式:动态储存(自动、寄存器)、静态储存(静态和外部)
    储存方式名称
    自动变量anto
    寄存器变量register
    静态储存static
    外部变量extern
    • 基本类型的静态变量(static)系统初始值为 0,全局变量也会自动初始化0
    • extern声明外部变量时,类型名可以写也可以不写,如extern int A,B,C,也可以写成extern A,B,C,因为它不是定义变量,可以不指定类型,只需写出外部变量名即可。
    • 若希望某些外部变量只限于本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明,如static int A;,那么在其他文件引用extern A就会报错。
    • 对局部变量声明static,作用是把它分配在静态内存,它在整个程序执行过程中不会被释放。对全局变量声明static,则限定该变量作用域只限于本文件。
    • 若要求函数只能被本文件内调用,称为内部函数,在定义内部函数时,加上static即可。
    • 若要定义外部函数,加上extern即可,但C语言默认不加static的就会外部函数,可以被其他文件调用。
    • Stack (栈内存):主要是用来存储 function calls(函数调用)和 local variables(局部变量) 的空间,其本质就是一个 Stack(栈)。最底层的便是 main() 函数,每调用一个函数时就会执行 push 操作,每当函数 return 时便执行 pop 操作。什么时候 main() 也被 pop 了,整个程序也就结束了。(如果这个 stack 变得太高以至于超出了最大内存地址,就会出现所谓的 stackoverflow

    • HEAP(堆内存):主要是用来存储由 malloc() 等申请的内存位置。如果 malloc() 返回 null 的话就往往表示这一块空间已经用完了。

    • Static (静态内存):这里的变量的生命周期与整个程序相同,即在进程创建是被申明,在程序退出时被销毁。global variables(全局作用域变量), file scope variables(文件作用域变量)和被 static 关键字修饰的变量会存在这里。

    2 默认初始化规则(C++11)

    • 栈中的变量(函数体中的自动变量)和堆中的变量(动态内存)会保有不确定的值;
    • 全局变量(静态内存)和静态变量(包括局部静态变量,静态内存)会初始化为零。

    C++11: If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. Note: Objects with static or thread storage duration are zero-initialized, see 3.6.2.

    展开全文
  • C++ 变量生存期

    千次阅读 多人点赞 2017-04-10 12:27:41
    变量生存期是指其在程序运行时占用内存空间的时间段。 1. 静态生存期  从程序开始执行时分配到程序结束时收回。...3. 动态生存期  用new操作或者malloc函数来进行分配,用delete操作或者调用free函数来收回。

    变量的生存期是指其在程序运行时占用内存空间的时间段。

    1. 静态生存期

        从程序开始执行时分配到程序结束时收回。

        如:全局变量

    2. 自动生存期

        从程序执行到定义它们的复合语句时分配到复合语句执行完毕时收回。

        如:局部变量、函数的参数

    3. 动态生存期

        用new操作或者malloc函数来进行分配,用delete操作或者调用free函数来收回。


    附:

    1. 在定义局部变量时,使用auto、static、register来显式指出它们的生存期。

        auto: 默认,自动生存期

        static: 静态生存期,在函数多次调用时,可以保留上次调用的结果

        register: 自动生存期,与auto不同在于,建议(不是一定)编译程序把该局部变量的空间分配在CPU寄存器中,其目的是为了提高对局部变量的访问效率。

    2. 内存空间分为四个部分:静态数据区、代码区、栈区、堆区

        静态数据区:全局变量、static存储类的局部变量、常量

        代码区: 函数代码

        栈区: auto存储类的局部变量、函数的形参、函数调用时的有关信息(如返回值)

        堆区: 动态变量


        静态数据区和代码区的大小是固定的,而栈区和堆区的大小随程序的运行不断变化(不过操作系统会对其空间最大值有一定的限制)。

    3.  编译程序隐式自动将静态生存期的变量按位模式初始化为0,其他变量不对其进行初始化(使用空间中的已有值,因此是不固定的)

    展开全文
  • c/c++ 变量生存期

    2013-11-14 00:38:47
    static 及全局变量,存放在静态存储区,生存期全局   局部变量,定义在栈端中,生存期在于所在函数或者类的生存期  利用malloc或new的变量,定义在堆上,生存期知道free或delete

        static 及全局变量,存放在静态存储区,生存期全局 

        局部变量,定义在栈端中,生存期在于所在函数或者类的生存期

        利用malloc或new的变量,定义在堆上,生存期知道free或delete


    展开全文
  • 变量生存期

    2017-04-17 16:08:33
    1.变量生存期。  首先变量分为全局变量以及局部变量。 ①全局变量是在主程序中进行定义,有效范围从定义开始直到程序运行结束为止。 ②局部变量是在程序的函数中定义,有效范围只在函数内部,当函数结束后,...
  • 静态变量 存储在动态存储区,只能在本文件的本函数内使用,函数结束后释放, 全局变量 存储在静态存储区,可以在本文件和其他文件内使用,程序运行结束后释放 静态局部变量 存储在静态存储区,只能在本文件的本函数内...
  •  C++把变量占有的内存空间的时间段称为生存期,分为三类:静态生存期动态生存期、自动生存期。 全局变量具有静态生存期; 局部变量和函数的参数一般具有自动生存期; 对于具有动态生存期变量,其内存空间...
  • 全局变量 自动初始化为 0 #include "stdio.h"int c;void fun() { int a=0; a++; c++; printf("%d,%d,",a,c); }int main(int argc, char const *argv[]) { int i; for(i=1;i;i++) fun(); retu
  • 如题,关于shell环境和变量生存期,有以下结论: 1、执行脚本时,脚本中的语句是在一个子shell环境中运行的,脚本执行完后该子shell自动退出; 2、一个shell中的系统环境变量才会被复制到子shell中(用export...
  • 变量生存期与存储类型1、变量生存期2、变量的存储类型【1】自动变量【2】外部变量【3】静态变量内部静态变量外部静态变量【4】寄存器变量附:总结表 1、变量生存期     所谓变量生存期...
  • #include using namespace std; int i=1;//i为全局变量,具有静态生存期 void other(){ ...//a、b是静态局部变量,具有静态生存期,局部可见。...//c是局部变量,具有动态生存期。 int c=10; a+=2; i+=32; c+=5;
  • 函数内部中生存期小于函数生存期变量不要使用malloc动态分配的变量内存,而应该使用局部变量,因为如果函数被调用很多次,会造成大量的内存碎片而导致内存浪费。 例如:函数 void tmp() { struct cookie* p = ...
  • 临时变量生存期

    2015-01-09 12:06:55
    C++很多运算里面都需要用到生存期: void f(int x) {  printf("%d", x); //需要一个临时变量传给printf函数 } int main() {  int a = 0;  int b = 0;  int c = a + b; //需要一个临时变量,保存a+b...
  • 也有自己的产生和消亡的生存期变量和对象的生存期包含静态生存期动态生存期。具有静态生存期变量和对象,它们的生存期和程序运行相同;除了具有静态生存期变量和对象,其余的变量和对象则具有动态生存期。...
  • JavaScript 变量生存期 JavaScript 变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除。
  • 变量的作用域和生存期

    万次阅读 2017-11-27 15:47:19
    变量的作用域:即变量的作用范围(有效范围)。...按其生存期可分为 动态变量和静态变量 变量只能在其生存期内被引用,而变量的作用域直接影响变量生存期。 局部变量的作用域和生存期 在函数...
  • 变量生存期的问题

    2006-03-16 15:27:00
    程序运行结果不是:csdn,而是乱码,这是因为getm里面的p是一个自动变量,在getm结束后,p的生存期就结束了,用getm返回一个指向这个生存期已结束的p变量的指针,其结果取决于原来存放p对象的内容有否被覆盖。...
  • 关于c++中局部变量生存期的思考

    千次阅读 2010-04-14 15:54:00
    我想在c++中局部变量的的生存期大家都很熟悉了吧,就生存在最近的一对大括号里,出了该括号,该变量就自动销毁了。因为我们经常在阻塞模式下写代码,所以没什么问题,但是换到非阻塞下呢,比如说多线程。下面看段...
  • C语言 局部变量与全局变量生存期

    千次阅读 2019-08-01 19:56:29
    1.局部变量 仅仅在定义它的函数的内才能有效使用,其作用域仅限在函数体内,即从变量定义的位置开始,到函数体结束。 2.局部变量的内存分配: 通常,编译器不为局部变量分配内存单元,而是在程序运行中,当局部...
  • 1.3.静态变量:静态变量只能定义全局变量,静态变量属于类。 注意:static存储在内存中的静态存储区(非堆栈,对象在堆栈中),静态变量可以在普通方法中使用。 2.静态代码块:当类加载时,代码...
  • 首先说明一下堆和栈,栈(英文名称是stack)是系统自动分配空间的。而堆(英文名称是heap)则是程序员根据需要自己申请的空间。... 所以,我们可以int* p=new int[n],而不能int a[n](n为变量)。
  • 自动变量——自动生存期变量,一个方法中的局部变量。在进入到声明它们的块是创建,当该块活动时存在,当退出该块时将其删除。 实例变量,如果没有提供初始值,编译器对其自动初始化。而自动变量必须由程序员初始化...
  • /* ... *All rights reserved. *文件名称:text.cpp *作者:陈腾 *完成日期:2016年5月...问题描述:变量生存期与可见性 */ #include using namespace std; int i=1;//i为全局变量,具有静态生存期 void othe
  • 在下面程序中体现了变量生存期和可见性 #include using namespace std; int i = 1; //i为全局变量,具有静态生存期 int main() { static int a; //a为静态局部变量,具有全局寿命,局部可见 int b =...
  • 当局部变量与全局变量同名时,局部变量在其作用域中优先。...因此,相对于程序来讲,这类变量生存期是永久的,而存储在动态存储区域的变量,是在程序运行时,由程序动态创建的,因此,这类变量生存期是短暂的。
  • 静态变量生存期和作用域

    千次阅读 2010-11-24 11:36:00
    静态变量生存期和作用域

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,824
精华内容 24,329
关键字:

动态变量的生存期