c-c++中static详解

c-c++中static详解

ID:37708538

大小:48.68 KB

页数:6页

时间:2019-05-29

c-c++中static详解_第1页
c-c++中static详解_第2页
c-c++中static详解_第3页
c-c++中static详解_第4页
c-c++中static详解_第5页
资源描述:

《c-c++中static详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、c-c++中static详解程序的存储从历史上讲,C程序一直由下面几部分组成:正文段CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是经常环境指针环境表环境字符串执行的程序(如文本编辑程序、C编译程序、shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外事故而修改其自身的指令。初始化数据段通常将此段称为数据段,它包含了程序中需赋初值的变量。初始化的全局变量和静态变量存放在这里。例如,C程序中任何函数之外的说明:intmaxcount=99;使此变量以初值存放在初始化数据段中。a.初始化的全局变量b.初

2、始化的静态变量非初始化数据段通常将此段称为bss段,这一名称来源于早期汇编程序的一个操作符,意思是“blockstartedbysymbol(由符号开始的块)”,未初始化的全局变量和静态变量存放在这里。在程序开始执行之前,内核将此段初始化为0。函数外的说明:longsum[1000];使此变量存放在非初始化数据段中。a.未初始化的全局变量b.未初始化的静态变量堆需要由程序员分配释放管理,若程序员不释放,程序结束时可能由OS回收。通常在堆中进行动态存储分配。如程序中的malloc,calloc,realloc等函数都从这里面分配。堆是从下向上分配

3、的。栈由编译器自动分配释放管理。局部变量及每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。新被调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,C函数可以递归调用。递归函数每次调用自身时,就使用一个新的栈帧,因此一个函数调用实例中的变量集不会影响另一个函数调用实例中的变量。a.局部变量b.函数调用时返回地址c.调用者的环境信息(例如某些机器寄存器)1.C语言中的static。static局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义它的生存期为整个程序生命

4、周期,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。(2)对基本类型的静态局部变量若在声明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。根据静态局部变量的特点,可以看出它是一种生存期为整个程序生命周期。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的

5、副作用,因此仍以采用局部静态变量为宜。例如:1.voidtest_static()2.{3.staticintTemp=1;4.Temp++;5.printf("Tempis:%d/n",Temp);1.}2.intmain(intargc,char*argv[])3.{4.inti=0;5.for(i=0;i<=4;i++)6.{7.test_static();8.}9.system("pause");10.}1.voidtest_static()2.{3.staticintTemp=1;4.Temp++;5.printf("Tempis:%

6、d/n",Temp);6.}7.intmain(intargc,char*argv[])8.{inti=0;9.for(i=0;i<=4;i++)10.{11.test_static();12.}13.system("pause");14.}事实上,staticintTemp=1;这句只会在第一次调用的时候才会执行。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。static全局变量全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态

7、存储方式。这两者在存储方式上并无不同。这两者的区别在于:(1).非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。(2).而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数如果在一个源文件中定义的函数,只能被本文件中的函数调用,

8、而不能被同一程序其它文件中的函数调用,这种函数称为static函数与称为静态函数。定义一个static函数,只需在函数类型前再加一个“static”关

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。