精华内容
下载资源
问答
  • C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量) 动态存储方式与静态存储方式 我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性...
  • 存储类别

    千次阅读 2018-02-25 23:34:25
    一、存储区域1.寄存器:存放立即参加运算的数据。2.系统区:存放系统软件。3.用户程序代码区:存放用户程序的程序代码。4.库程序代码区:存放库函数的代码。5.数据区,分为堆区、栈区和静态存储区。(1)堆区:存放...

    一、存储区域

    1.寄存器:存放立即参加运算的数据。

    2.系统区:存放系统软件。

    3.用户程序代码区:存放用户程序的程序代码。

    4.库程序代码区:存放库函数的代码。

    5.数据区,分为堆区、栈区和静态存储区。

    (1)堆区:存放动态变量,即由malloc申请的动态变量。

    (2)栈区:存放自动存储类型的变量,包括函数和复合语句中的局部变量等。

    (3)静态存储区:存放具有显式声明的静态类型的变量。


    二、这个存储空间可以分为三部分,即:

    • 程序区
    • 静态存储区
    • 动态存储区

    各个变量详细分配位置如下图:


    数据分别存放在静态存储区和动态存储区中。全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储单元,程序执行完毕就释放这些空间。在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。

    在动态存储区中存放以下数据:
    • 函数形式参数。在调用函数时给形参分配存储空间。
    • 函数中的自动变量(未加static声明的局部变量,详见后面的介绍)。
    • 函数调用时的现场保护和返回地址等。

    对以上这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间。在程序执行过程中,这种分配和释放是动态的,如果在一个程序中两次调用同一函数,则要进行两次分配和释放,而两次分配给此函数中局部变量的存储空间地址可能是不相同的。

    如果在一个程序中包含若干个函数,每个函数中的局部变量的存储期并不等于整个程序的执行周期,它只是整个程序执行周期的一部分。根据函数调用的情况,系统对局部变量动态地分配和释放存储空间。

    在C++中变量除了有数据类型的属性之外,还有存储类别(storage class) 的属性。存储类别指的是数据在内存中存储的方法。存储方法分为静态存储和动态存储两大类。具体包含4种:自动的(auto)静态的(static)寄存器的(register)外部的(extern)。根据变量的存储类别,可以知道变量的作用域和存储期。

    自动变量

    函数中的局部变量,如果不用关键字static加以声明,编译系统对它们是动态地分配存储空间的。函数的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类。在调用该函数时,系统给形参和函数中定义的变量分配存储空间,数据存储在动态存储区中。在函数调用结束时就自动释放这些空间。如果是在复合语句中定义的变量,则在变量定义时分配存储空间,在复合语句结束时自动释放空间。因此这类局部变量称为自动变量(auto variable)。自动变量用关键字auto作存储类别的声明。例如:
    int f(int a) //定义f函数,a为形参
    {
        auto int b, c=3; //定义b和c为整型的自动变量
    }

    存储类别auto和数据类型int的顺序任意。关键字auto可以省略,如果不写auto,则系统把它默认为自动存储类别,它属于动态存储方式。程序中大多数变量属于自动变量。本教程前面各章所介绍的例子中,在函数中定义的变量都没有声明为auto,其实都默认指定为自动变量。在函数体中以下两种写法作用相同:
    auto int b, c=3;
    int b, c=3;

    用static声明静态局部变量

    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。这时就应该指定该局部变量为静态局部变量(static local variable)

    【例4.12】静态局部变量的值。
    1. #include <iostream>
    2. using namespace std;
    3. int f(int a) //定义f函数,a为形参
    4. {
    5. auto int b=0; //定义b为自动变量
    6. static int c=3; //定义c为静态局部变量
    7. b=b+1;
    8. c=c+1;
    9. return a+b+c;
    10. }
    11. int main( )
    12. {
    13. int a=2,i;
    14. for(i=0;i<3;i++)
    15. cout<<f(a)<<" ";
    16. cout<<endl;
    17. return 0;
    18. }
    运行结果为:
    7 8 9

    先后3次调用f函数时,b和c的值如书中表4.1所示。
    表 4.1 调用函数时自动变量和静态局部变量的值
    第几次调用调用时初值调用结束时的值
    自动变量b静态局部变量cbca + b+c
    第1次03147
    第2次04158
    第3次05169

    图 4.14

    对静态局部变量的说明:
    1. 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
    2. 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
    3. 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
    4. 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。

    在什么情况下需要用局部静态变量呢?

    1) 需要保留函数上一次调用结束时的值。例如可以用下例中的方法求n!。

    【例4.13】输出1~5的阶乘值(即1!,2!,3!,4!,5!)。
    
       
    1. #include <iostream>
    2. using namespace std;
    3. int fac(int); //函数声明
    4. int main( )
    5. {
    6. int i;
    7. for(i=1;i<=5;i++)
    8. cout<<i<<"!="<<fac(i)<<endl;
    9. return 0;
    10. }
    11. int fac(int n)
    12. {
    13. static int f=1; //f为静态局部变量,函数结束时f的值不释放
    14. f=f*n; //在f原值基础上乘以n
    15. return f;
    16. }

    运行结果为
    1!=1
    2!=2
    3!=6
    4!=24
    5!=120
    每次调用fac(i),就输出一个i,同时保留这个i!的值,以便下次再乘(i+1)。

    2) 如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值。 但是应该看到,用静态存储要多占内存,而且降低了程序的可读性,当调用次数多时往往弄不清静态局部变量的当前值是什么。因此,如不必要,不要多用静态局部变量。

    用register声明寄存器变量

    一般情况下,变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到CPU中的运算器。经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。如图4.15所示。


    图 4.15

    为提高执行效率,C++允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。这种变量叫做寄存器变量,用关键字register作声明。例如,可以将例4.14中的fac函数改写如下:
    1. int fac(int n)
    2. {
    3. register int i,f=1; //定义i和f是寄存器变量
    4. for(i=1;i<=n;i++) f=f*i;
    5. return f;
    6. }
    定义f和i是存放在寄存器的局部变量,如果n的值大,则能节约许多执行时间。

    在程序中定义寄存器变量对编译系统只是建议性(而不是强制性)的。当今的优化编译系统能够识别使用频繁的变量,自动地将这些变量放在寄存器中。

    用extern声明外部变量

    全局变量(外部变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为本文件中各个函数所引用。编译时将全局变量分配在静态存储区。

    有时需要用extern来声明全局变量,以扩展全局变量的作用域。

    1) 在一个文件内声明全局变量
    如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字extern对该变量作外部变量声明,表示该变量是一个将在下面定义的全局变量。有了此声明,就可以从声明处起,合法地引用该全局变量,这种声明称为提前引用声明

    【例4.14】用extern对外部变量作提前引用声明,以扩展程序文件中的作用域。
    
       
    1. #include <iostream>
    2. using namespace std;
    3. int max(int,int); //函数声明
    4. void main( )
    5. {
    6. extern int a,b;//对全局变量a,b作提前引用声明
    7. cout<<max(a,b)<<endl;
    8. }
    9. int a=15,b=-7;//定义全局变量a,b
    10. int max(int x,int y)
    11. {
    12. int z;
    13. z=x>y?x:y;
    14. return z;
    15. }
    运行结果如下:
    15

    在main后面定义了全局变量a,b,但由于全局变量定义的位置在函数main之后,因此如果没有程序的第5行,在main函数中是不能引用全局变量a和b的。现在我们在main函数第2行用extern对a和b作了提前引用声明,表示a和b是将在后面定义的变量。这样在main函数中就可以合法地使用全局变量a和b了。如果不作extern声明,编译时会出错,系统认为a和b未经定义。一般都把全局变量的定义放在引用它的所有函数之前,这样可以避免在函数中多加一个extern声明。

    2) 在多文件的程序中声明外部变量
    如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量num,不能分别在两个文件中各自定义一个外部变量num。正确的做法是:在任一个文件中定义外部变量num,而在另一文件中用extern对num作外部变量声明。即
        extern int num;
    编译系统由此知道num是一个已在别处定义的外部变量,它先在本文件中找有无外部变量num,如果有,则将其作用域扩展到本行开始(如上节所述),如果本文件中无此外部变量,则在程序连接时从其他文件中找有无外部变量num,如果有,则把在另一文件中定义的外部变量num的作用域扩展到本文件,在本文件中可以合法地引用该外部变量num。

    分析下例:
    filel.cpp
    extern int a,b;
    int main()
    {
        cout<<a<<","<<b<<end!;
        return 0;
    }

    file2.cpp
    int as3,b=4;


    在源程序文件ffle2.cpp中定义了整型变量a和b,并賦了初值。在filel.cpp中用extern声明外部变量a和b,未賦值。在编译连接成一个程序后,file2.cpp中的a和b的作用域扩展到file2.cpp文件中,因此main函数中的cout语句输出a和b的值为3和4。

    用extern扩展全局变量的作用域,虽然能为程序设计带来方便,但应十分慎重,因为在执行一个文件中的函数时,可能会改变了该全局变量的值,从而会影响到另一文件中的函数执行结果。

    用static声明静态外部变量

    有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。例如:
    file1.cpp
    static int a=3;
    int main ( )
    {
       ┆
    }

    file2.cpp
    extern int a;
    int fun (int n)
    {
       ┆
       a=a*n;
       ┆
    }

    在filel.cpp中定义了一个全局变量a,但它用static声明,因此只能用于本文件,虽然 在cpp文件中用了“extern int a;”,但file2.cpp文件中仍然无法使用filel.cpp中的全局变量a。

    这种加上static声明、只能用于本文件的外部变量(全局变量)称为静态外部变量。这就为程序的模块化、通用性提供了方便。如果已知道其他文件不需要引用本文件的全局变量,可以对本文件中的全局变量都加上static,成为静态外部变量,以免被其他文件误用。

    需要指出,不要误认为用static声明的外部变量才采用静态存储方式(存放在静态存储区中),而不加static的是动态存储(存放在动态存储区)。实际上,两种形式的外部变量都用静态存储方式,只是作用范围不同而已,都是在编译时分配内存的。

    转自:

    http://c.biancheng.net/cpp/biancheng/view/141.html

    http://www.cnblogs.com/yatesxu/p/5302630.html

    展开全文
  • 圳 职 业 技 术 学 院Shenzhen Polytechnic 六单元4变量的作用域与存储类别 教学内容 变量的作用域和存储类别内部函数和外部函数工程文件 教学目标 应知 变量的作用域与生存期 变量的存储类别 内部函数外部函数的...
  • C语言_存储类别

    千次阅读 多人点赞 2020-06-29 20:05:23
    C语言的存储类别包括4种:自动的(auto)、静态的(static)、寄存器(register)、外部的(exteren) 1.自动变量(auto变量) 函数中的局部变量,如果不专门声明为(static)静态存储类别,都是动态地分配存储空间的...

    C语言的存储类别包括4种:自动的(auto)、静态的(static)、寄存器(register)、外部的(exteren)

    1.自动变量(auto变量)

    函数中的局部变量,如果不专门声明为(static)静态存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。

    形参与函数中定义的局部变量,都是自动变量,在调用结束就会自动释放这些存储空间

    2.静态局部变量(static局部变量)

    (1)静态局部变量属于静态存储类别,在静态存储区分配存储单元,在程序整个运行期间都不释放。而自动变量(动态局部变量)属于动态存储类别,分配在动态存储区空间而不在静态存储空间,函数调用结束后即释放。

    (2)对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时已有初值,以后每次调用不需要重新赋值,而是只保留

    上次函数调用结束时的值,对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

    (3)如果在定义局部变量时不赋初值,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符'\0'(对字符变量)。而对自动变量来说,它的值是一个不确定的值,这是由于每次函数调用结束后存储单元已释放,下次调用时又重新分配存储单元,而所分配的单元中的内容是不可知的

    (4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。因为它是局部变量,只能被本函数引用。

    3.寄存器变量(register变量)

    一些变量使用频繁,存取变量要花费不少时间,提高效率,允许把局部变量放在CPU中的寄存器中,直接从寄存器中存取,可以提高执行效率,这种变量叫做寄存器变量

    3种局部变量的存储位置不同的;自动变量存储在动态存储区,静态变量存储在静态存储区、寄存器存储在CPU中的寄存器中

    4.全局变量的存储类别

    全局变量都是存放在静态存储区中的,生存期是固定的,存在于整个运行过程。

    一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。

    (1)在一个文件内扩展外部变量的作用域

    extern:不是定义变量,可以不指定类型,只要名称即可
    extern int A;
    或者
    extern A;
    int main(){
        extern A    //在主函数内可以使用A,将A的作用域扩展到此处
    
    }
    int A;

    (2)将外部变量的作用域扩展到其他文件

    文件1 file.c中定义 int A;
    文件2 file2.c中使用 extern A;

    (3)将外部变量的作用域限制在本文件内

    static int A;        //静态外部变量

    用static声明变量的作用是

    (1)对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期都不释放,其所在的分配的空间始终存在

    (2)对于全局变量用static声明,则该变量的作用域只限于本文件模块(即是被声明的文件中)

    (4)存储类别总结:

    static int a;        //静态局部整型变量或静态外部整型变量
    auto char c;         //自动变量,在函数内定义
    register int d;      //寄存器变量,在函数内定义
    extern B;           //将已定义的外部变量b的作用域扩展至此

    一个变量的属性可以从两个方面

    (1)作用域:从空间角度

    定义:一个变量在某一文件或者函数范围内有效,则被称为该变量的作用域,称为变量的可见性

    (2)生存期:从时间角度

    定义:在某一时刻时存在的,认为该时刻属于该变量的生存期

    各种类型变量的作用域和存在性的情况
    变量存储类型函数内函数外
    作用域存在性作用域存在性
    自动变量和寄存器变量××
    静态局部变量×
    静态外部变量√(只限本文件)
    外部变量

    (3)static对于全局变量和局部变量作用不同

    对于局部变量来说,它使变量由动态方式改变为静态存储方式

    对于全局变量来说,它使变量局部化,但是仍为静态存储   

    从作用域来看

            凡是由static声明的,其作用域都是局限的,或者局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。

    5.关于变量的声明和定义

    一个函数一般有两部分组成:声明部分和执行语句

    声明部分的作用是对有关标识符(如变量、函数、结构体、共用体等)属性进行声明

    函数的声明是函数的原型,而函数的定义是对函数功能的定义。

    对被调用函数的声明是放在主调函数的声明部分中的,而函数定义显然不在声明部分的范围内,它是一个独立的模块

    声明:是不需要建立存储空间,声明只是为了扩展该变量的作用范围而做的“声明”。

    定义:需要建立存储空间

    6.内部函数与外部函数

    (1)内部函数又被称为静态函数,用static声明的

    如果一个函数只能被本文件中其他函数调用,它被称为内部函数,在定义内部函数时,在函数名和函数类型的前面加static,即

    static 类型名 函数名(形参表);
    static fun(int a,int b);

    (2)外部函数

    extern 类型名 函数名(形参表);
    extern fun(int a,int b); 
    //    或者省略不写 默认
    fun(int a,int b);

     

    展开全文
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...

    C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)

    1----局部变量和全局变量
    在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。

    1.1 局部变量
    局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
    关于局部变量的作用域还要说明以下几点:

    1. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
    2. 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
    3. 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的。
    4. 在复合语句中也可定义变量,其作用域只在复合语句范围内。

    1.2 全局变量
    全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

    2. 变量的存储类别
    2.1 动态存储方式与静态动态存储方式
    前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。
    从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。

    • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
    • 动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。

    用户存储空间可以分为三个部分:

    1. 程序区;
    2. 静态存储区;
    3. 动态存储区;

    全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

    动态存储区存放以下数据:

    1. 函数形式参数;
    2. 自动变量(未加static声明的局部变量);
    3. 函数调用实的现场保护和返回地址;

    对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
    在c语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。

    2.2 auto变量
    函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。

    a是形参,b,c是自动变量,对c赋初值3。执行完f函数后,自动释放a,b,c所占的存储单元。
    关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

    2.3 用static声明局部变量
    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

    对静态局部变量的说明:
    1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
    2)静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

    2.4 register变量
    为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

    说明:

    1. 只有局部自动变量和形式参数可以作为寄存器变量;
    2. 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
    3. 局部静态变量不能定义为寄存器变量。

    2.5 用extern声明外部变量
    外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

    说明:在本程序文件的最后1行定义了外部变量A,B,但由于外部变量定义的位置在函数main之后,因此本来在main函数中不能引用外部变量A,B。现在我们在main函数中用extern对A和B进行“外部变量声明”,就可以从“声明”处起,合法地使用该外部变量A和B。

    展开全文
  • 我们在之前的文章中已经尝试获取s3的所有存储的文件大小和 最后修改时间 清洗入库。 现在可以 对 s3存储进行 精细化的 优化了。比如 对s3存储进行分层优化。 这样可以把我们的成本 明显的降低。 s3的存储目前有6层,...

    我们在之前的文章中已经尝试获取s3的所有存储的文件大小和 最后修改时间 清洗入库。

    现在可以 对 s3存储进行 精细化的 优化了。比如 对s3存储进行分层优化。

    这样可以把我们的成本 明显的降低。

    s3的存储目前有6层,具体什么样的数据 选择 哪种, 本篇文章进行分析。

    s3存储 提供的 分层类型

    Amazon S3 提供一系列适合不同使用案例的存储类。

    1、S3 标准(适用于频繁访问的数据的通用存储);
    2、S3 智能分层(适用于具有未知或变化的访问模式的数据);
    3、S3 标准 - 不频繁访问(S3 标准 - IA) 适用于长期存在、但访问不太频繁的数据;
    4、S3 单区 - 不频繁访问(S3 单区 - IA) 适用于长期存在、但访问不太频繁的数据;
    5、 Amazon S3 Glacier (S3 Glacier) (适用于长期存档和数字保留)
    6、 Amazon S3 Glacier 深度存档(S3 Glacier 深度存档)(适用于长期存档和数字保留)

    Amazon S3 还提供了在整个数据生命周期内管理数据的功能(可界面操作也可以通过sdk代码实现)。
    设置 S3 生命周期策略之后,无需更改您的应用程序,您的数据将自动传输到其他存储类。

    总览和性能层面

    展开全文
  • 变量的存储类别

    2019-11-29 01:04:33
    在C语言中,每一个变量和函数都有两个属性,数据类型(int,float…)和数据存储类别。 数据存储方式分为两大类:静态存储类、动态存储类。具体包括四类:auto、static、register、extern。对一个变量只能声明为一种...
  • C语言的存储类别存储类别标识符

    千次阅读 2019-03-07 23:53:56
    存储类别 存储期 作用域 链接 声明方式 自动 自动 块 无 块内 寄存器 自动 块 无 块内,使用关键字register 静态外部链接 静态 文件 外部 所有函数外 静态...
  • C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参...
  • 函数用于实现特定功能,可以互相调用。分为无参函数、有参函数和空函数。在定义函数时定义形参,调用函数时传递实参...存储分为动态存储和静态存储,分为自动、静态、寄存器、外部;函数还可以分为内部函数和外部函数。
  • C语言存储类别

    千次阅读 2018-07-08 12:24:10
    属于自动存储类别的变量具有自动存储周期、块作用域且无链接,默认情况下,声明在块中或函数头中的任何变量都属于自动存储类别,也可以显式使用关键字auto auto int plox 自动变量不会初始化,必须要显式的...
  • C/C++函数的存储类别

    千次阅读 2020-03-23 14:19:50
    函数也有存储类别,可以是外部函数(默认)或静态函数。 C99 新增了 第 3 种类别——内联函数。外部函数可以被其他文件的 函数访问,但是静态函数只能用于其定义所在的文件。假设一个文件中包含 了以下函数原型: ...
  • C++语言变量的存储类别

    千次阅读 2018-07-14 22:29:21
    存储类别是变量的属性之一。在我们定义一个变量时,其实是有前缀的,只是我们通常省略。C++语言有4中变量的存储类别,分别是auto变量、static变量、register变量、extern变量。不同的变量存储方式会使变量的生存期...
  • C语言中变量的存储类别

    千次阅读 2019-06-07 17:59:18
    C语言中变量的存储类别: 自动类型(auto) 寄存器类型(register) 静态类型(static) 外部变量(extern) 自动类型(auto) 自动类型(auto)变量是存储在动态存储区的变量。 关键字:auto 一般形式为:auto 类型 变脸...
  • C++变量的存储类别

    千次阅读 2018-01-18 22:43:20
    一、动态存储方式与静态存储方式 上一节已介绍了变量的一种属性——作用域,作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量...
  • AWS实战 - S3存储类别

    2019-01-08 14:39:33
    STANDARD: 用于储存经常访问的对象,默认的标准储存类别存储费用最高,请求(执行Select/GET/PUT等操作)费用最低; STANDARD_IA: 用于储存不经常访问的对象,存储费用较低,请求费用较高; INTELLIGE...
  • C 语言的变量都有两个属性:数据类型和存储类别 存储类别:auto、static、register、extern ,变量的存储类别决定了变量在内存中的存储区域。 一、介绍内存存储区 在C语言中,内存存储区分为:栈、堆、静态存储区...
  • 数据的存储类别

    2017-05-05 15:53:27
    对一个数据的定义,需要指定两种属性:数据类型和存储类别,分别使用两个关键字。例如:static int a;//静态局部整型变量或静态外部整型变量 auto char c;//自动变量,在函数内定义 register int d;、、寄存器变量...
  • 存储类别的变量具有静态存储期、文件作用域和内部链接。 在所有函数外部(这点与外部变量相同),用存储类别说明符static定义的变量具有 这种存储类别: static int svil = 1; // 静态变量,内部链接 int main...
  • 局部变量存储类别

    千次阅读 2018-08-21 08:52:37
    1.自动变量(auto) int f(int a) { auto int a,b; } auto 可以省略 int b,c=3;等价于 auto int b,c=3; 2.静态局部变量(static) #include&lt; stdio.h&gt; int main() ... int a=2,...
  • c语言:变量的存储类别

    千次阅读 2018-04-07 18:09:07
    1.动态存储方式与静态存储方式运行结果:1)函数中的局部变量(形参、在函数中定义的变量等),如果不专门声明为static存储类别,都是动态分配存储空间的,在函数调用时系统给这些变量分配空间,在调用结束时系统就...
  •  从变量值存在的时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。 静态存储方式:程序在运行期间,由系统分配固定的存储空间的方式。 动态存储方式:程序在运行期间根据需要进行动态的分配存储空间...
  • C的五种存储类别

    千次阅读 2017-12-16 15:39:32
     在cpp上,列出了以下五种存储类型:(不考虑线程的概念) 1.自动:  默认的存储类型,最早接触,通常不用关键字,在需要与其他类型做区分时,可以加上auto关键词.在块作用域中声明,具有自动存储期,即程序进入该块时...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...
  • 变量值存在的时间角度来分可以分为静态存储方式和动态存储方式所谓静态存储方式是指在程序运行期间有系统分配固定的存储空间的方式而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式具体包含4...
  • C语言课件变量的作用域与存储类别相关知识讲解
  • 本项目为存储类别利用脚本或工具 FoFa搜索 基于Python3编写的具有图形化界面的FoFa搜索工具 UI设定尺寸符合MAC使用,可填写关键字后自行编译使用
  • 函数中的局部变量,如果不专门声明为static存储类别,都是动态的分配存储空间的,数据存储在动态存储区中。这类变量叫做自动变量,自动变量可以用关键字auto作为存储类别的声明,实际上关键字auto是可以省略的(一般...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,811
精华内容 73,524
关键字:

存储类别