内存

作者: Dylan_J | 来源:发表于2019-10-31 16:23 被阅读0次

内存指具体的存储空间,统称为存储器。


内存.jpeg

内存分类:

RAM

RAM(Random Access Memory):运行内存,CPU可直接访问,读写速度非常快,不能掉电存储,其分为:

  • DRAM(动态):速度慢一些,需要定期刷新,内存条就是指它,即手机中的运行内存。价格稍低。
  • SRAM(静态):速度快,一级缓存、二级缓存就是指它。价格稍高。

ROM

ROM(Read-Only Memory):存储性内存,可以掉电存储。空间大便宜。
SD卡、Flash都是ROM。
NandFlash和NorFlash:前者用的较多空间大、价格便宜;后者可以直接运行程序,读写速度快,但RAM速度快鱼NorFlash;手机中使用的基本都是NandFlash,CPU不能直接访问,需要文件系统/驱动程序将其读到RAM中,CPU才能访问。
App程序通常存放在ROM中,点击程序时将App从ROM拷贝到RAM中运行。

RAM内存结构:

内存结构.png
  • 栈区(Stack):这个区域一般由编译器操作,或者说是系统管理,内存地址是连续的,会存储一些局部变量,函数跳转时现场保护(寄存器保存),这些系统都会自动实现。
    特点:
    1.栈区地址从高到低分配。
    2.存放的局部变量(先进先出)一旦出了作用于就会被销毁。
    3.大量的局部变量,深递归,函数循环调用都可能耗尽内存导致程序崩溃。

  • 堆区(Heap):一般人工管理,比如alloc申请内存,free释放内存。我们创建的对象也都放在这里。内存地址是不连续的。(1.操作系统有一个空闲的内存地址链表 2.当系统受到程序申请后,会遍历链表,寻找大于所需请求空间的地域,然后将该结点从链表中删除 3.由于找到的大小不一定正好,所以自动将多余的部分重新放入空间链表中)
    特点:
    1.堆区地址是从低到高分配。
    2.ARC下OC对象Runloop循环结束一同释放(CF对象手动释放)

  • 全局/静态区:全局变量和静态变量放在一起,初始化的全局变量和静态变量放在一个区域,未初始化的全局变量和静态变量存储在相邻的另一个区域。程序结束后由系统释放。
    1.data段:1.被初始化的非0全局变量 2.被初始化的非0static局部变量。
    2.bss段: 1.未被初始化的全局变量 2.未被初始化的static修饰的全局变量。

  • 常量区:常量字符串存储在这里,还有const常量。

  • 代码区:存放代码,App程序被拷贝到这里。

    当一个App启动后,代码区,常量区,全局区地址已固定,因此指向这些区的指针不会为空而产生崩溃性的错误。而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃。

CPU调度内存关系

CPU调度内存.png

相关文章

  • Linux 内存管理 应用篇

    1、物理内存和虚拟内存 物理内存:物理内存就是系统硬件提供的内存大小,是真正的内存 虚拟内存:为了满足物理内存的不...

  • linux io与zero copy

    1. 物理内存与虚拟内存 1.1 物理内存 物理内存指通过物理内存条而获得的内存空间。 1.2 虚拟内存 虚拟内存...

  • 性能优化<第五篇>:内存优化

    1、为什么要内存优化? 2、了解内存中的内容 3、内存上限 4、GC内存回收机制 5、内存泄漏、内存抖动、内存溢出...

  • JVM第二天-volatile final synchroniz

    1.JAVA内存模型 简单的讲,Java 内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程...

  • 伙伴算法和slab算法

    0. 内存管理问题 内存碎片太小和管理内存碎片的效率问题 内存碎片:回收内存时,将内存块放入free链表中。因内存...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 物理内存和虚拟内存

    物理内存 物理内存是真实的内存大小,即内存条内存大小 虚拟内存 虚拟内存是为了满足系统对超出物理内存容量的需求时在...

  • 5、哪些情况下会导致oom问题?

    1、根据java的内存模型会出现内存溢出的内存有堆内存、方法区内存、虚拟机栈内存、native方法区内存;2、一般...

网友评论

    本文标题:内存

    本文链接:https://www.haomeiwen.com/subject/otutbctx.html