有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用的时候该变量已经有值。这时就应该指定该局部变量为静态变量,用关键字 static 进行声明。

static修饰变量

修饰局部变量1、让局部变量只初始化一次。                                                                                   2、局部变量在程序中只有一份内存                                                                              3、对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终在                                                                                     4、并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)

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

例如:单例模式中使用的 static。

内存(定义)

可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。

静态存储区(全局存储区):内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

描述:

全局变量、静态变量会存储在此区域。事实上全局变量也是静态的,因此,也叫全局静态存储区。存储方式: 初始化的全局变量跟静态变量放在一片区域,未初始化的全局变量与静态变量放在相邻的另一片区域。

程序结束后由系统释放。

栈区:在函数执行时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中、效率很高,但是分配的内存容量有限。

描述:

内存管理由系统控制,存储的为非静态的局部变量,例如:函数参数,在函数中生命的对象的指针等。当系统的栈区大小不够分配时, 系统会提示栈溢出。

堆区:堆区亦称动态内存分配。程序在运行的时候用malloc或alloc申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存(iOS5之前,需要我们手动管理内存。iOS5后,系统自动管理内存)。但是良好的编程习惯是:如果动态内存不在使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。

描述:

内存管理由程序控制,存储的为malloc , new ,alloc出来的对象。

如果程序没有控制释放,那么在程序结束时,由系统释放。但在程序运行过程中,会出现内存泄露、内存溢出问题。

分配方式 类似于链表。

代码区:存放函数体的二进制代码

描述:

存放函数体的二进制代码。

运行程序就是执行代码,代码要执行就要加载进内存。

文字常量区:常量字符串就是放在这里的。程序结束后由系统释放

描述:

在程序中使用的常量存储在此区域。程序结束后,由系统释放。在程序中使用的常量,都会到文字常量区获取。

static在内存层面的作用_static的作用和内存划分?相关推荐

  1. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  2. 聊聊jvm的内存结构, 以及各种结构的作用

    前言 在JVM的管控下,Java程序员不再需要管理内存的分配与释放,这和在C和C++的世界是完全不一样的.所以,在JVM的帮助下,Java程序员很少会关注内存泄露和内存溢出的问题.但是,一旦JVM发生 ...

  3. 计算机内存条属于什么电路,内存是什么?内存条的作用到底是什么?

    随着现代科技不断的发展,很多电子产品的功能也越来越强大,例如电脑.电视.手机.学习机.故事机等,都有内存,可以储存很多的内容播放.尤其是电脑,内存是电脑硬件中必不可少的配件.那么,今天小编就和大家分享 ...

  4. 内存中栈和堆的作用和区别

    首先内存中的堆栈和数据结构中的堆栈是不同的两个东西. 内存中分为栈和堆,以及静态存储区.程序代码区等. 内存模型: 从空间上和存放内容上来说: 栈:内存空间小一些,栈的内存要远远小于堆内存,如果你使用 ...

  5. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  6. 内存位置访问无效_万字长文——java内存模型之volatile深入解读

    在阅读本文前,请思考以下的面试题? volatile是什么? volatile的特性 volatile是如何保证可见性的? volatile是如何保证有序性的? volatile可以保证原子性吗? 使 ...

  7. redis 内存不足 排查_Redis 系统学习之 redis 内存模型

    关注:架构师学习路线,每日更新互联网最新技术文章与你不断前行,实战资料,笔试面试 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并 ...

  8. 内存专题--各种RAM/ROM/Cache/Flash等内存概念与区别

    内存,或内存储器,又称为主存储器,是关系到计算机运行性能高低的关键部件之一,无疑是非常重要的.为了加快系统的速度,提高系统的整体性能,我们看到,计算机中配置的内存数量越来越大,而内存的种类也越来越多. ...

  9. Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...

最新文章

  1. 105. oracle 经典查询 总结
  2. c语言程序中的注释必须单独占一行,C语言习题第一章
  3. Java 之 内部类
  4. Android热修复实现及原理
  5. 如何高效的将 DataReader 转成 List<T> ?
  6. 现在有很多年轻人都不想打工
  7. C# .net Static 干什么的
  8. sir模型matlab案例_下一代矩阵法amp;微分方程稳定性——以SIR系列为例
  9. python与开源gis_Python与开源GIS:SpatiaLite简介
  10. 解决win10中无法打开CHM文件的方法
  11. 三国志战略版:官渡之战_新阵容解读_曹操
  12. 每日MySQL之010:导出Delimited-Text格式文件
  13. 乐器php毕业论文,打击乐器在音乐课堂教学中的应用
  14. Solr_专题:shema 之 types
  15. java dcm转bmp源码_DCM文件转图像,并高清处理图像
  16. 金额保留小数点后两位方法
  17. 父母脾气暴躁对孩子有哪些影响
  18. 用HTML制作一首诗
  19. 深度学习训练遇到的坑(一)
  20. 编写爬取糗事百科信息爬虫代码学习笔记

热门文章

  1. 后勤与FI集成的几个配置地方
  2. win7 java闪退_win7 sdk manager 闪退
  3. android 保存退出之前的页面_项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)...
  4. python基础笔记_python基础学习笔记(九)
  5. android 状态机的作用,Android 状态机、状态模式 基础框架实现
  6. oracle 11.2.0.4 mos,【翻译自mos文章】在RHEL7 or OEL7上安装oracle 11.2.0.4 db时的
  7. CTF杂项题型之画图-Miscellaneous-200
  8. Python种reverse和reversed反转列表的操作方法
  9. Python用HTMLTestRunner生成html测试报告
  10. java 动态创建实例_java – 有没有办法动态创建类(而不是实例)?