C内存2:程序是如何运行的
由内存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:程序是如何运行的相关推荐
- java在程序运行过程中_Java内存管理-程序运行过程(一)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...
- JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】
思维导图 概述 运行时数据区域 程序计数器 (Program Counter Register) 概念 特征 可能抛出的异常 知识扩展:JIT即时编译 Java虚拟机栈 (Java Virtual M ...
- Java在加载阶段会加载依赖吗,Java程序编译和运行过程之 一个对象的生命之旅(类加载和类加载器)...
Java程序从创建到运行要经过两个大步骤 1:源文件(.java)由编译器编译成字节码ByteCode(.class) 2:字节码由Java虚拟机解释并运行 源文件编译成字节码,主要分成两个部分: 1 ...
- 从内存中加载并运行exe(两种方法)
windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动. 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法. 用途嘛, 也许可以 ...
- 后台启动_Windows10中如何阻止程序在后台运行
Windows用的越久速度越慢有多种原因,其中一个原因是安装了很多开机启动并驻留在内存中的程序.用户可以通过禁用这些后台程序来改善计算机运行的速度.有很多方法可以做到这一点,最简单的就是下载一个第三方 ...
- 面试必问:用 Java 写一个内存泄漏程序
编译:ImportNew/唐尤华 原文链接:stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java 问题: 刚参加的一 ...
- Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)
Linux内核深入理解系统调用(2) vsyscall 和 vDSO 以及程序是如何运行的(execve) rtoax 2021年3月 1. vsyscalls 和 vDSO 这是讲解 Linux 内 ...
- 电脑程序是如何运行起来的
肯定有很多人很奇怪电脑程序是如何运行起来的吧.这其中涉及到了电子计算机最底层的原理,大家能够了解的更为全面一些.我在这里就简单而形象的为大家讲一讲这其中的机理. 第三次工业革命与前两次工业革命有着一个 ...
- 一起来探索从双击程序到开始运行期间计算机经历了哪些过程
前言 经常打开电脑双击桌面上的图标,之后就会跳出程序的界面,那么童鞋们有想过这期间计算机经历了什么吗?正所谓知其然知其所以然,了解了指不定还有机会向妹子科普一下(●ˇ∀ˇ●). 计算机结构 一个程序想 ...
- 适合手机运行的服务器系统,同样2GB内存 手机为啥不如电脑运行好?
电子设备流畅的运行,直接影响到用户的应用体验,应用体验是一个新兴的概念,但却是衡量电子设备优劣的一个重要指标,对电子产品的购买产生着直接的影响. 影响电子设备应用体验最直接因素就是硬件配置,相同的配置 ...
最新文章
- 758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击
- 大型运输行业实战_day14_1_webserivce简单入门
- Linux环境下安装Mysql+SphinxSE
- C 中的内存操作函数-memcpy 等(to be continued)
- 百度地图JavaScript API覆盖物旋转时出现偏移
- thinking-in-java(13) String字符串
- DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
- MFC 时间记时器, string 转化为CString
- python群控模拟安卓系统_手机群控脚本通用版安装包下载-手机群控脚本通用版apk(云控平板)v1.0.01真机模拟版_新绿资源网...
- 绝对误差和相对误差的定义
- IMDB 电影评论情感分类数据集
- 北大计算机就业报告,北京大学信息科学技术学院解读和毕业生就业统计
- 打印26个大写字母和26个小写字母
- 打印一本200页的书要多少钱?
- cin、cout、cerr、clog用法区别及其在VS环境下的重定向
- Base64解密算法、AES解密
- 什么是seo?seo的定义
- 教你怎么用迅雷下载LOL
- 公司、分公司、子公司、有限公司、企业、个体户的区别!
- 天兔oracle,天兔(Lepus)监控操作系统(OS)安装配置
热门文章
- 2021年大数据常用语言Scala(二十):函数式编程 介绍
- Android switchCompat. 和 Switch
- MyBatis if标签的用法
- @Controller和@RestController的区别?
- [LeetCode] 130. Surrounded Regions Java
- composer爆错:zlib_decode():data error
- Session原理、安全以及最基本的Express和Redis实现
- 太久没来了,好尴尬呀
- 结构体成员的引用方法
- 读《大道至简》第六章感想