摘要:计算机的内存,计算机当中所有程序的运行都在内存中进行,也就是你电脑的内存条中运行的。计算机内存也被称为随机访问存储器,Random Access Memory,简称R-A-M。

内存一般用于存放程序指令和运算数据,帮助CPU与硬盘等外部存储设备进行数据的交换,内存只能临时存放程序的指令和数据,当电脑关闭之后,内存当中的数据就会随之消失。计算机当中的程序指令,或者是操作数据都是以二进制的形式在内存当中存储和计算的。

我们可以将内存看作是排成一排的方格,每个方格可以存储0或者是1这两种数字。

这其中,一个方格也被称为一个比特位,将8个连续的比特分为一组,代表1个字节byte。

如果将内存比作是一栋大楼的话,那么字节就是大楼当中的房间,而每个房间都对应一个唯一的门牌,所以每个字节都有一个唯一的地址。那么这些地址也被称为内存地址。通过内存地址,我们可以访问内存当中的每一个字节。内存地址一般用16进制表示,16进制表示的数字用0X开头,假如说内存地址从八个0到八个F,那个内存的大小就是16的八次方,也就是2^32次方个字节=4GB大小。

使用Windows当中的DEBUG程序,可以模拟并且查看CPU、寄存器,还有内存当中的相关数据,这里我们使用DEBUG命令主要是为了更加直观的观察和理解内存,观察到的数据并不是当前内存当中真实的数据。

那么我们除了使用字节为单位来表示内存的大小,还可以使用千字节KB,兆字节MB,还有千兆字节GB来表示,一般来说呢,现在的计算机都是以GB来形容内存的大小,其中1KB等于1024字节,1MB等于1024KB,1GB等于1024MB,那么2^23方字节就是4GB了。

那么程序到底是如何运行的呢?

开发的软件放在我们电脑的硬盘上,比如电脑上我们经常使用的QQ软件,点击QQ图标—>右击—>属性。可以看到QQ是一个.exe可执行文件。当我们双击QQ时,QQ程序就会运行起来。

程序在运行过程中要先放到从内存中。就以这个QQ为例,QQ.exe文件肯定是使用某一个编译器生成的文件。通过在编译器中写好代码,然后编译连接,将我们学过的函数啊、代码啊、变量啊等等转换成电脑CPU可已执行的010101数字。也就是我们写的代码包含了大量的CPU能识别的机器代码、CPU指令。生成的.exe文件里面就是0101010101…指令。CPU读取内存中的数据,读取指令控制执行相应的操作。在CPU内部有寄存器、运算器和控制器。因为寄存器就在内部,所以说内存中需要计算的数据首先要将其拿到寄存器中进行运算,将算好的数据送回到内存中去。

通常,CPU会先将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运算。假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间。

1、CPU首先会将红色内存空间的值放到EAX寄存器中:mov eax,红色内存空间
2、然后让EAX寄存器与1相加:add eax,1
3、最后将值赋值给内存空间:mov 蓝色内存空间,eax

程序是如何运行的呢?相关推荐

  1. Ubuntu中如何使得程序在后台运行

    Ubuntu中如何使得程序在后台运行 一.前言 在Ubuntu中有的程序启动需要执行改程序./bin目录下的文件,并且启动之后这个shell就不能使用和关闭了,非常的麻烦,因此就有了相应的命令来解决这 ...

  2. iOS中判断程序是不是第一次运行(新手引导界面用)

    2019独角兽企业重金招聘Python工程师标准>>> 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序 ...

  3. Arduino可穿戴教程之第一个程序——上传运行程序(四)

    Arduino可穿戴教程之第一个程序--上传运行程序(四) 2.4.5  上传程序 现在所有Arduino IDE的设置都完成了,我们就可以将示例程序上传到板子中了.这非常简单,只需要单击如图2.45 ...

  4. python爬虫流程-Python爬虫程序架构和运行流程原理解析

    1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息. 获取响应内容 服务器正常响应,将会收到一个res ...

  5. 让程序常驻后台运行的原理和方法

    为什么80%的码农都做不了架构师?>>>    linux中进程组织结构为session包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程. 一个session可能会有 ...

  6. 【iOS系列】-程序开启后台运行

    [iOS系列]-程序开启后台运行 iOS程序是伪后台的运行,可是有时候我们需要让其在后台也要进行一些操作,我们可以让其伪装成音乐的APP,这样就可以让程序后台进行相关操作了,具体做法如下: 1:在Ap ...

  7. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  8. java程序代码的运行机制_1.4Java程序的运行机制

    Java 程序的运行必须经过编写.编译和运行 3 个步骤. 编写:是指在 Java 开发环境中进行程序代码的输入,最终形成后缀名为 .java 的 Java 源文件. 编译:是指使用 Java 编译器 ...

  9. mac python3打包成窗体程序_python3代码打包成mac的程序,没办法运行,各位大神请指导一下...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 python3代码打包成mac的程序,没办法运行,打包的时候没有出错,请高手知道的说一下,我是一个小白, 这是出错的提示: Last login: Sat ...

  10. 今天终于将第一个 Android NDK 程序编译、运行成功

    今天终于将第一个 NDK 程序编译.运行成功. 起先看资料和书籍时,都要求安装 CygWin.我也安装了,并将 Sample: hello-jni 编译成功.编译的 LOG 如下:  LeoZheng ...

最新文章

  1. python array 语法_Python基本语法
  2. devops 成长路线
  3. python获取maco句柄_python之subprocess模块
  4. Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: project_path/jni/Android.mk
  5. mongodb小结(转)
  6. 面试(之)三赴上海易传媒—揭秘之旅
  7. 台电x80plus装linux,纤巧却不简单——台电X80 Plus评测
  8. [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)
  9. java输入args不能为空_java程序入口为什么有的空括号在args前面有的?
  10. 用Cairo画IBM logo并输出为pdf,ps,svg格式文件
  11. Delphi 下用Windows API 创建窗体
  12. Linux 进程热升级
  13. OpenCV学习笔记——图像平滑处理
  14. Pytorch下使用多GPU训练模型
  15. vue-router小案例-后台管理路由
  16. 一图学会配置微信云端店员监控收款回调
  17. 计算机共享打印怎么设置密码,共享打印机需要密码的解决方法
  18. P1548 [NOIP1997 普及组] 棋盘问题
  19. App内嵌H5活动页面携带用户token
  20. 电脑关闭所有应用的快捷键

热门文章

  1. Jupyter notebook打开方式
  2. Block原理(一)
  3. Android 沉浸式状态栏 一体化状态栏实现
  4. 《自己动手做智能机器人》——1.3 机电一体化技术带来哪些明星产品
  5. Win11系统打开自带虚拟机平台的方法
  6. Android自定义华为睡眠,Android 模仿华为健康自定义 计步View
  7. python系列3(list tupe dict )
  8. 恢复平衡0x8b,0xff,0x55,0x8b,0xec
  9. PHPnow, 省去我无尽烦恼
  10. 海康摄像头监控视频播放详解