一、c程序存储空间布局

  C程序一直由下列部分组成:

  1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;

  2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。

  3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。

  4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。

  5)堆——动态存储分。

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|-----------|
| |
|-----------|
| 栈 |
|-----------|
| | |
| |/ |
| |
| |
| /| |
| | |
|-----------|
| 堆 |
|-----------|
| 未初始化 |
|-----------|
| 初始化 |
|-----------|
| 正文段 |
|-----------|

  二、 面向过程程序设计中的static

  1. 全局静态变量

  在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

  1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

  3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

  定义全局静态变量的好处:

  <1>不会被其他文件所访问,修改

  <2>其他文件中可以使用相同名字的变量,不会发生冲突。

  2. 局部静态变量

  在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。

  1)内存中的位置:静态存储区

  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

  3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

  注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。

  当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

  3. 静态函数

  在函数的返回类型前加上关键字static,函数就被定义成为静态函数。

  函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

  定义静态函数的好处:

  <1> 其他文件中可以定义相同名字的函数,不会发生冲突

  <2> 静态函数不能被其他文件所用。

  存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。

  auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

  关键字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。

  扩展分析:

  术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,

  C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

c语言中static使用方法相关推荐

  1. c语言中static变量

    c语言中static变量 2009-06-30 20:33:24|  分类:默认分类 |  标签:|字号大中小 订阅 static静态变量声明符. 在声明它的程序块,子程序块或函数内部有效,值保持,在 ...

  2. c语言中{的作用,C语言中Static和Const关键字的作用

    C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...

  3. c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...

    c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  4. c语言中static的作用 举例,static什么意思c语言

    Q1:C语言编程中"static"是什么意思? static 出现在不同的地方含义不抄同的. 如果是在函数之外使用,表示该对像在此文件中是全局可访问的知,在文件之外是不可访问的. ...

  5. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

  6. C语言中static关键字的作用

    在C语言中static的作用如下 第一.在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放.  第二.static修饰全局变量的时候, ...

  7. C语言中static详细分析

    google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...

  8. 【✊基础不牢,地动山摇のC语言中static关键字✊】

    C语言中static关键字 用static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分.要降对象指定为静态存储,可以在正常的声明之前加上关键字static作为前缀. ...

  9. 以下关于c语言中static和const,c语言中static const作用

    c语言中static const作用 (2012-06-21 07:51:08) 标签: it 关键字static: 1. 在函数体内,一个被声明为静态的变量在这一个函数被调用的过程中维持其值不变. ...

最新文章

  1. linux程序计数器,如何在C中打印程序计数器的确切值
  2. [Java]学习Java(4)类、接口、语句
  3. 汇编指令长度计算方法
  4. [mybatis]typeHandlers日期类型的处理
  5. nagios 整合 ganglia 设置邮件、短信报警
  6. 10 岁研究计算机,电脑神童“不务正业”的技术路
  7. Angular 4.x 自定义验证指令
  8. 如何配置 Linux ipv6 6RD隧道
  9. Atom: 几个常用的快捷键,恢复主菜单
  10. 用gambit学博弈论---零和博弈
  11. 开源OA系统魔方OA ASP.Net 4.0或4.8
  12. 全面剖析雅虎助手以及网络实名的流氓行径(9)
  13. java游戏繁体字名字_繁体字游戏名(精选500个)_繁体字游戏名字大全_繁体字游戏网名...
  14. Shapefile属性操作之改
  15. Python | NumPy | 3D 数据可视化 - 散点图
  16. 7-6 536 判定子串
  17. 3d在线展示线上VR全景展示系统
  18. Python数据分析与实战挖掘
  19. mpegtsenc.c的源码
  20. Linksys路由器被曝多个漏洞

热门文章

  1. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
  2. Linux下文件开头的feff的问题
  3. 最简单的排序算法(C和C++实现)
  4. [视频]Silverlight for Windows Phone 7基本开发过程以及Push Button控件的使用
  5. glm编译错误问题解决 formal parameter with __declspec(align(#39;16#39;)) won#39;t be aligned...
  6. zabbix企业应用:通过SNMP和iDRAC监控DELL服务器硬件
  7. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建项目
  8. DevExpress.XtraGrid 导出文本的bug
  9. 团队DevOps实践之一
  10. BugkuCTF 你必须让他停下