正在加载图片...
占用的内存单元才被释放。静态数据在程序运行的整个运行过程中只进行一次初始化,每次 访问某一静态数据时,该数据保持上次被访问修改后的值 动态存储区用来存放动态存储的数据,这些数据在其作用域的代码开始执行时才被分给 所需的内存单元,在其作用域的代码运行结束时,这些内存单元将被释放,进行重新分配。 动态数据在每次其作用域被调用而为动态数据分配内存单元,该数据获得的内存单元内存在 的数据内容是不可预测的。因此动态数据需要在其作用域每次重新被调用时进行初始化,否 则将发生错误。 过多地使用静态存储数据会引起程序运行所占用的内存的急剧增加,影响程序的运行效 率。因此在静态数据和动态数据的使用上应根据实际要求决定,不可滥用。 在C++语言中,根据存储类型的不同,数据可分为四种 (1)自动存储类型数据:用关键字auto进行说明,为此类数据分配存储空间及回收它 们所占用的存储空间的工作都是由系统自动处理的,属于动态存储数据类型。C++编译器将 所有局部数据默认为自动存储类型,所以auto在实际编程中很少使用。 (2)静态存储类型数据:用关键字 static进行说明,由于该类数据是按静态存储方式 进行保存的,因而数据在其作用域之外仍能保留其值,以便下次进入其作用域时能继续使用 该值 (3)寄存器存储类型数据:用关键字 regist进行说明,该类型数据彩动态存储方式进 行保存,但与auto类型不同的是,编译器会尽可能地将所说明的该类数据存储在CP的寄 存器中。其目的是为了提高访问效率。若在程序运行的某一时期CPU暂时没有空闲的寄存器, 则编译系统的优化功能会当作自动存储类型数据处理:反之也可以。因此很少用到寄存器存 储类型数据 值得注意的是全局数据及静态数据不能说明为寄存器存储类型,否则两者的说明发生矛 (4)外部存储类型数据:用关键字 extern进行说明,该类型数据主要用在由多个源文 件组成的程序中,向编译器说明该数据在其它文件中已经定义过了。不带 extern说明的全 局数据属于定义性说明。在一程序的多个源文件中,对同一个数据只能在一个文件中进行一 个定义性说明,此时编译将为该文件中说明的数据分配内存。 注意:①变量的初始化也属于定义性说明,不能在其他文件中再对其进行初始化。 ②若程序中的所有源文件对某一全局数据所作的全是外部说明,也没有初始化 则编译器将从中任意选取其中一个外部数据的说明作为其定义性说明。 例2.6自动存储类型数据和静态存储类型数据比较示例 //EX2 6. CPP /自动存储类型数据和静态存储类型数据比较示例 #includeiostream. h> void display( int var);/子函数的引用说明 void main(/程序的主函数 Int 1,J; display (i)占用的内存单元才被释放。静态数据在程序运行的整个运行过程中只进行一次初始化,每次 访问某一静态数据时,该数据保持上次被访问修改后的值。 动态存储区用来存放动态存储的数据,这些数据在其作用域的代码开始执行时才被分给 所需的内存单元,在其作用域的代码运行结束时,这些内存单元将被释放,进行重新分配。 动态数据在每次其作用域被调用而为动态数据分配内存单元,该数据获得的内存单元内存在 的数据内容是不可预测的。因此动态数据需要在其作用域每次重新被调用时进行初始化,否 则将发生错误。 过多地使用静态存储数据会引起程序运行所占用的内存的急剧增加,影响程序的运行效 率。因此在静态数据和动态数据的使用上应根据实际要求决定,不可滥用。 在 C++语言中,根据存储类型的不同,数据可分为四种: (1)自动存储类型数据:用关键字 auto 进行说明,为此类数据分配存储空间及回收它 们所占用的存储空间的工作都是由系统自动处理的,属于动态存储数据类型。C++ 编译器将 所有局部数据默认为自动存储类型,所以 auto 在实际编程中很少使用。 (2)静态存储类型数据:用关键字 static 进行说明,由于该类数据是按静态存储方式 进行保存的,因而数据在其作用域之外仍能保留其值,以便下次进入其作用域时能继续使用 该值。 (3)寄存器存储类型数据:用关键字 regist 进行说明,该类型数据彩动态存储方式进 行保存,但与 auto 类型不同的是,编译器会尽可能地将所说明的该类数据存储在 CPU 的寄 存器中。其目的是为了提高访问效率。若在程序运行的某一时期 CPU 暂时没有空闲的寄存器, 则编译系统的优化功能会当作自动存储类型数据处理;反之也可以。因此很少用到寄存器存 储类型数据。 值得注意的是全局数据及静态数据不能说明为寄存器存储类型,否则两者的说明发生矛 盾。 (4)外部存储类型数据:用关键字 extern 进行说明,该类型数据主要用在由多个源文 件组成的程序中,向编译器说明该数据在其它文件中已经定义过了。不带 extern 说明的全 局数据属于定义性说明。在一程序的多个源文件中,对同一个数据只能在一个文件中进行一 个定义性说明,此时编译将为该文件中说明的数据分配内存。 注意:①变量的初始化也属于定义性说明,不能在其他文件中再对其进行初始化。 ②若程序中的所有源文件对某一全局数据所作的全是外部说明,也没有初始化, 则编译器将从中任意选取其中一个外部数据的说明作为其定义性说明。 例 2.6 自动存储类型数据和静态存储类型数据比较示例 //EX2_6.CPP //自动存储类型数据和静态存储类型数据比较示例 #include<iostream.h> void display(int var);//子函数的引用说明 void main()//程序的主函数 { int i,j; i=19; j=91; display(i);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有