计算机内存与外存的区别及使用配合(内存外存区别与搭配;快速缓存;计算机总线结构;计算机程序内存分布(栈、堆、全局/静态、数据区、代码段))

1. 为什么计算机存储会分为内存和外存呢?

  • 外部储存器断电可以存储数据,但是读写速度相对于cpu来说很慢,而内存虽然读取速度很快但是断电之后就会丢失数据
  • 访问权限不同CPU只能直接访问内存,外存的东西要先到内存CPU才能处理
  • 我们日常使用的程序,比如字处理程序、网络浏览器等一般都存放在外部存储器硬盘上。但存储在这里的程序不能直接运行,要使用它们时,必须将其装入内部存储器才能正常运行。如果把程序和数据比作某个书房中的书籍,那么存放书籍的书架就相当于计算机的外部存储器,看书用的写字台就相当于内部存储器,要看书的时候就需要先把书从书架上取下来,然后再拿到写字台上去看。
    你很可能遇到过这样的情况:在使用计算机写文档的时候,突然停电了,而你又没有及时保存刚刚写好的文字,再打开计算机时,这些未保存的文字就找不回来了。这就是因为那些未保存的文字,是暂存在内部存储器中的,一旦停电,数据就会丢失。如果你保存了文件,数据就被转移到硬盘中,也就是被存在了外部存储器中,这样遇上停电,数据也不会丢失了。
  • 内部存储器的存储容量小,一般存储运行中的程序和数据,它包括随机存储器、只读存储器以及高速缓存。我们日常生活中谈到的内存主要就是指随机存储器。外部存储器的存储容量相对大许多,常见的外部存储器有硬盘、软盘、光盘、U盘等。
    网上找到的关于存储器层次结构图:
    在这里插入图片描述

2. 关于快速缓存

在这里插入图片描述

3. 计算机总线结构

详细参考:计算机总线结构详解
在这里插入图片描述

4. 计算机程序内存分布(栈、堆、全局/静态、数据区、代码段)

此处找到的是关于手机的,电脑的内存分布也是类似

4.1 存储器

RAM: 随机存取存储器(random access memory)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。 它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序

ROM: 只读存储器(Read-Only Memory),是一种只能读出事先所存数据的固态半导体存储器。 其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失,CPU是不能直接访问的,而是需要文件系统/驱动程序(嵌入式中的EMC)将其读到RAM里面,CPU才可以访问。

看一下CPU、RAM、ROM之间的关系图
在这里插入图片描述

4.2 存储器

App安装到手机后,存储在ROM中,程序启动后,系统会把App程序从ROM里面拷贝到RAM,然后从RAM里面执行代码。

4.3 RAM内存分布

RAM内存中分5个区

4.3.1 栈区(stack)

  • 存放的局部变量、函数的参数值、函数跳转地址

  • 先进后出,一旦出了作用域就会被销毁

  • 栈区地址从高到低分配

  • 自动管理内存

4.3.2 堆区(heap)

  • 堆区的内存分配使用的是malloc配合free,new配合delete

  • 堆区的地址是从低到高分配

  • 需要程序猿管理内存;

4.3.3 全局区/静态区(static)

  • 存放全局变量和静态变量(未初始化过 、初始化过)

  • 初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域

  • 程序结束后由系统释放

4.3.4 常量区

  • 常量字符串就是放在这里;

  • 存放常量字符串

  • 程序结束后由系统释放

4.3.5 代码区

  • 存放App代码

  • 程序结束后由系统释放

4.3.6 结构示意图

在这里插入图片描述

4.4 注意事项:

1.栈区中的变量由编译器负责分配和释放,内存随着函数的运行分配,随着函数的结束而释放,由系统自动完成。只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值