运行一个完整的程序。我们可将整个存储区分为四块:

(1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心。

(2)堆区:堆来堆去的。得要人动手。所以得我们自己手动去分配和释放。像malloc(c),new(c++) ,delete 一下等等。

(3)全局数据(静态区):全局变量和静态变量是放在一个窝里面的。静态变量如果没有初始化,系统会自动初始化的。虽然系统会自动初始化,但是分房间的时候还是得分清楚的。

    所以最终是初始化的全局变量和初始化的静态变量分在一块区域,即同一个房间。未初始化的全局变量和未初始化的静态变量分在一块。程序结束时释放。

(4)最后就是代码区了

staic主要由五种用法:

(a)如果用static修饰局部函数的变量。那么这个变量就是静态变量了。在主函数中,如果重复调用这个函数,那么里面的这个静态变量只会初始化一次。如果没有用static修饰,那么每次

   调用的时候都会对这个变量进行初始化。

(b)如果用static修饰全局的变量。那么在这个文件中所有的函数都可以使用这个变量。如果一个工程里面有a.c和b.c文件,static在a.c中定义的。那么b.c就用不了这个static修饰的变量。如

   果没有static修饰,只要加一个extern外部调用声明,就可以了。

(c)如果用static修饰全局函数,同上(b)。

以上三点是C++中的描述,在C中也同样适用。只是C++还多了两种情况。就是在类中的修饰。

(d)static修饰类中的变量。用static修饰之后,那么这个变量的内存就分配在了全局数据区了,并不和该类在同一片区域。所以static只会被初始化一次。

(e)static修饰类中的函数。那么该函数就变成了静态函数。静态函数不能访问非静态函数,非静态函数可以访问静态函数。访问静态函数可以用(.->),指针或者类名::三种方式访问。

转自 https://blog.csdn.net/majianfei1023/article/details/45290467

最新文章

  1. 美国usan数据库——PDF提取
  2. 软件测试人员必备Linux命令(初、中、高级)
  3. Graphic32中TBitmap32.TextOut性能分析[转载]
  4. 第二章 Odoo的安装与部署
  5. mybatis动态SQL标签的用法
  6. css3,环绕圆环 loading,小组件
  7. MySQL存储过程之事务管理
  8. mac上charels抓包工具使用技巧
  9. project facet java version 1.6 is not supported
  10. DWZ在APS.NET WebForm中的使用(一)
  11. 最长非降子序列的O(n^2)解法
  12. hadoop的webUI查看Live Nodes为1
  13. SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试
  14. 在MyEclipse中搭建spring-boot+mybatis+freemarker框架
  15. linux查找符合条件的文件并删除
  16. 【bzoj 1901】Zju2112 Dynamic Rankings
  17. Unity3d外部加载音频,视频,图片等资源 及根据路径获取制定格式的文件
  18. 11G新特性 -- OLTP Table Compression
  19. 论文笔记:Semantic Segmentation using Adversarial Networks
  20. MVC出现错误:系统找不到指定文件(异常来自 HRSULT:0x80070002)

热门文章

  1. es6 promise 简单总结
  2. jenkins 集成jmeter-简单篇
  3. linux--->阿里云centos6.9环境配置安装lnmp
  4. springboot整合elasticJob实战(纯代码开发三种任务类型用法)以及分片系统,事件追踪详解
  5. C++ ABI之名字改编(以Qt为例)
  6. ubuntu 如何搭建svn 服务器
  7. CCF_201612-3_炉石传说
  8. Codeforces_512_B
  9. bind() 理解 【转】
  10. SQL基础语法—update语句