由内存1的讲解我们知道,内存仅仅是一个存放指令和数据的地方,要完成计算功能需要将其读取到CPU内部。

然而CPU内部又包含很多个小零件,它是一个复杂的计算机部件。

上图中的运算单元相当于CPU的大脑功能,负责各种运算工作,而且每种运算工作都有对应的电路支持,速度很快。

寄存器(Register)是CPU内部一个非常小非常快速的存储部件,但是它的容量是有限的。我们经常说到的多少位的CPU其实指的就是寄存器的位数,对于32位的CPU,每个寄存器一般能存储32位(4个字节,一个字节是8位)的数据,对于64位的CPU每个寄存器一般能存储64位(8个字节)的数据。为了实现程序中复杂的功能,现在的CPU都内置了几十个甚至上百个寄存器,(嵌入式的功能单一,寄存器数量较少)。

寄存器在程序的执行过程中至关重要,不可或缺,它们可以用来完成数学运算、控制循环次数、控制程序的执行流程、标记CPU运行状态等,CPU就是用它来记录程序的运行状态,然后根据他的值再决定下一步的操作。例如,EIP(Extern Instruction Pointer )寄存器的值是下一条指令的地址,CPU执行完当前指令后,会根据 EIP 的值找到下一条指令,改变 EIP 的值,就会改变程序的执行流程;CR3 寄存器保存着当前进程页目录的物理地址,切换进程就会改变 CR3 的值。

缓存:在CPU的内部设置一个缓存,是为了将使用频繁的数据暂时读取到缓存,当需要同一地址上的数据时,就不用再去访问内存,直接从缓存读取(对于不经常使用的数据依然从内存上读取,对于那些数据保留在缓存上,哪些数据不保留都有复杂的算法控制)。因为虽然内存的读取速度很快,但是同CPU比起来还是很慢,不在一个数量级上,这样每次从内存读取数据会严重拖慢CPU的运行速度,每次读取会造成CPU等待无事可做。

所以我们购买电脑时也会关注缓存的容量,一级缓存是32KB,二级缓存是256KB,三级缓存是8MB。缓存容量越大,CPU越厉害。

要想让CPU工作起来,是需要指令集的,我们编写的C代码最终也是会编译成一条条的CPU指令集

C内存2:程序是如何运行的相关推荐

  1. java在程序运行过程中_Java内存管理-程序运行过程(一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...

  2. JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】

    思维导图 概述 运行时数据区域 程序计数器 (Program Counter Register) 概念 特征 可能抛出的异常 知识扩展:JIT即时编译 Java虚拟机栈 (Java Virtual M ...

  3. Java在加载阶段会加载依赖吗,Java程序编译和运行过程之 一个对象的生命之旅(类加载和类加载器)...

    Java程序从创建到运行要经过两个大步骤 1:源文件(.java)由编译器编译成字节码ByteCode(.class) 2:字节码由Java虚拟机解释并运行 源文件编译成字节码,主要分成两个部分: 1 ...

  4. 从内存中加载并运行exe(两种方法)

    windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动.      而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法.      用途嘛,     也许可以 ...

  5. 后台启动_Windows10中如何阻止程序在后台运行

    Windows用的越久速度越慢有多种原因,其中一个原因是安装了很多开机启动并驻留在内存中的程序.用户可以通过禁用这些后台程序来改善计算机运行的速度.有很多方法可以做到这一点,最简单的就是下载一个第三方 ...

  6. 面试必问:用 Java 写一个内存泄漏程序

    编译:ImportNew/唐尤华 原文链接:stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java 问题: 刚参加的一 ...

  7. Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)

    Linux内核深入理解系统调用(2) vsyscall 和 vDSO 以及程序是如何运行的(execve) rtoax 2021年3月 1. vsyscalls 和 vDSO 这是讲解 Linux 内 ...

  8. 电脑程序是如何运行起来的

    肯定有很多人很奇怪电脑程序是如何运行起来的吧.这其中涉及到了电子计算机最底层的原理,大家能够了解的更为全面一些.我在这里就简单而形象的为大家讲一讲这其中的机理. 第三次工业革命与前两次工业革命有着一个 ...

  9. 一起来探索从双击程序到开始运行期间计算机经历了哪些过程

    前言 经常打开电脑双击桌面上的图标,之后就会跳出程序的界面,那么童鞋们有想过这期间计算机经历了什么吗?正所谓知其然知其所以然,了解了指不定还有机会向妹子科普一下(●ˇ∀ˇ●). 计算机结构 一个程序想 ...

  10. 适合手机运行的服务器系统,同样2GB内存 手机为啥不如电脑运行好?

    电子设备流畅的运行,直接影响到用户的应用体验,应用体验是一个新兴的概念,但却是衡量电子设备优劣的一个重要指标,对电子产品的购买产生着直接的影响. 影响电子设备应用体验最直接因素就是硬件配置,相同的配置 ...

最新文章

  1. 758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击
  2. 大型运输行业实战_day14_1_webserivce简单入门
  3. Linux环境下安装Mysql+SphinxSE
  4. C 中的内存操作函数-memcpy 等(to be continued)
  5. 百度地图JavaScript API覆盖物旋转时出现偏移
  6. thinking-in-java(13) String字符串
  7. DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
  8. MFC 时间记时器, string 转化为CString
  9. python群控模拟安卓系统_手机群控脚本通用版安装包下载-手机群控脚本通用版apk(云控平板)v1.0.01真机模拟版_新绿资源网...
  10. 绝对误差和相对误差的定义
  11. IMDB 电影评论情感分类数据集
  12. 北大计算机就业报告,北京大学信息科学技术学院解读和毕业生就业统计
  13. 打印26个大写字母和26个小写字母
  14. 打印一本200页的书要多少钱?
  15. cin、cout、cerr、clog用法区别及其在VS环境下的重定向
  16. Base64解密算法、AES解密
  17. 什么是seo?seo的定义
  18. 教你怎么用迅雷下载LOL
  19. 公司、分公司、子公司、有限公司、企业、个体户的区别!
  20. 天兔oracle,天兔(Lepus)监控操作系统(OS)安装配置

热门文章

  1. 2021年大数据常用语言Scala(二十):函数式编程 介绍
  2. Android switchCompat. 和 Switch
  3. MyBatis if标签的用法
  4. @Controller和@RestController的区别?
  5. [LeetCode] 130. Surrounded Regions Java
  6. composer爆错:zlib_decode():data error
  7. Session原理、安全以及最基本的Express和Redis实现
  8. 太久没来了,好尴尬呀
  9. 结构体成员的引用方法
  10. 读《大道至简》第六章感想