我们写的软件是文本格式的代码,这些代码不能直接运行,需要使用编译器编译成操作系统或者虚拟机可以运行的代码(可执行代码),它们都被存储在文件系统中。不管是文本格式的代码还是可执行的代码,都被称为程序,程序是静态的,安静地呆在磁盘上,什么也干不了。

要想让程序处理数据,完成计算任务,必须把程序从外部设备加载到内存中,并在操作系统的管理调度下交给 CPU 去执行,去运行起来,才能真正发挥软件的作用,程序运行起来以后,被称作进程

进程除了包含可执行的程序代码,还包括进程在运行期使用的内存堆空间、栈空间、供操作系统管理用的数据结构。如下图所示:

操作系统把可执行代码加载到内存中,生成相应的数据结构和内存空间后,就从可执行代码的起始位置读取指令交给 CPU 顺序执行。指令执行过程中,可能会遇到一条跳转指令,即 CPU 要执行的下一条指令不是内存中可执行代码顺序的下一条指令。编程中使用的循环 for…,while…和 if…else…最后都被编译成跳转指令。

程序运行时如果需要创建数组等数据结构,操作系统就会在进程的堆空间申请一块相应的内存空间,并把这块内存的首地址信息记录在进程的栈中。堆是一块无序的内存空间,任何时候进程需要申请内存,都会从堆空间中分配,分配到的内存地址则记录在栈中。栈是严格的一个后进先出的数据结构,同样由操作系统维护,主要用来记录函数内部的局部变量、堆空间分配的内存空间地址等。

一个程序是如何运行起来的?相关推荐

  1. C# .net防止一个程序(WinForm)重复运行的方法。

    //在写一些服务型的软件的时候,你可能不希望一个操作系统里有两个副本在运行,这样也许会扰乱你的操作.这时,你就需要限制程序的副本.下面的这个方法,很简单的就可以实现上述功能. using System ...

  2. 如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

     http://blog.csdn.net/sunmingming512/article/details/23333041 ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它 ...

  3. java程序怎么都不是一个_java运行的流程-怎么运行java程序编了一个程序不知道怎么运行郁闷啊后缀文件名是 爱问知识人...

    在初学java编程语言时,痛苦的事莫过于跟着示例一步步做,总是得不到想要的结果,这是很多初学者都会碰到的问题.下面详细教你运行第一个java应用程序(环境windows xp + jdk 6.0): ...

  4. 一个程序从开始运行到结束的完整过程

    源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,源程序就是所写好的代码. 可执行程序,即常说的.exe程序,可以执行程序,完成计算机功能.在C语言中,.c文件就是所谓的源文 ...

  5. 精致全景图 | 程序是如何运行起来的

    hi,大家好,当程序员的第一个程序:hello,word能成功跑起来的时候,很多人就很好奇,我们程序是如何运行起来的?今天分享一篇好文,帮你解惑,希望对你理解计算机原理有一定帮助! 因为图片比较大,微 ...

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

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

  7. C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...

    给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的. /*输入多个字符串以END结束后排序*/ #include #include main() {char a[20][3 ...

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

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

  9. C#程序只允许运行一个实例的解决方案

    最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的窗口,并显示在最前端.在网上google了一哈,找到了很多的解决方案.这里我整理了3种方案,并经过了测试,现和朋友们分 ...

最新文章

  1. 一封会笑死人的校园情书
  2. 那些年,面试被虐过的红黑树 1
  3. python 两数之和
  4. android关于控件中setTag(key,Object)的设置的相关问题
  5. Python——Django学习笔记
  6. 95-235-040-源码-task-Flink 对用户代码异常处理
  7. linux sed
  8. 分布式爬虫原理之Scrapy分布式实现
  9. SPSS统计分析学习记录
  10. 公务员从事计算机网络工作,干程序员好,还是从事公务员更有前途?网友:要是我就当公务员!...
  11. java输入年月输出日历_Java实现按年月打印日历功能【基于Calendar】
  12. 天猫欲攻手机市场 中华酷联倒戈 京东或将失势
  13. rabbitmq 默认用户和密码
  14. uc缓存分段视频合并
  15. umoocs外语慕课答案_umoocs答案怎么查,中国高校外语慕课平台(UMOOCs)答案公众号
  16. excel表格打印每页都有表头_分享|1分钟学会,让打印的表格每页自带标题行
  17. nginx安装三大的命令的解释./configure make make install
  18. 给图片添加文字(换行)水印
  19. 反问疑问句的一些用法
  20. SpringBoot Thymeleaf Vue Mybatis 登录和注册的实现,以及使用Cookie实现七天免登录

热门文章

  1. 票面利率,收益率和到期收益率
  2. php井字游戏代码_井字游戏 - 做一款回忆童年的游戏
  3. 记第七届ACM校赛-回忆
  4. 速卖通装修html自定义代码,Shopify基础建站教程,独立站装修主题代码设置
  5. MDU某产品OMCI模块代码质量现状分析
  6. STM8L151C8单片机学习例程(2)——CLK切换
  7. 东南大学计算机考研信息汇总
  8. 一个JAVA程序员经常访问的网站
  9. 以太坊开发者证实 Eth2.0 不会在7月上线
  10. CSDN日报190716:忆贵州三年的教书编程岁月:不弛于空想,不骛于虚声