运行时和编译时有什么区别? [关闭]

2024-01-10

那么什么是运行时呢?是执行无法在特定处理器上运行的半编译代码的虚拟机吗?如果是这样,那么什么是虚拟机?是否是另一个将半编译代码进一步转换为机器特定代码的软件?那么,如果我们谈论的是一种不编译为中间代码而是直接翻译/编译为机器代码的语言呢?这种情况下的运行时间是多少?是硬件(CPU 和 RAM)吗?

另外,编译时和运行时有什么区别?它们是软件生命周期的阶段吗?我的意思是程序最初是一堆文本文件,对吧?因此,您将它们编译或翻译为一种数据形式,然后可以将其加载到内存并由处理器执行,或者如果它是“托管”语言,则需要进一步编译才能在硬件上运行。 到底什么是托管语言?

最后,是否存在调试时间这样的东西?它是什么?

我正在学习计算机科学的第一个学期,它的教学方式确实不合逻辑,这让我很困惑。 “信息”被塞进我的喉咙里,但每当我试图通过将所有相关内容组织到一个由明确定义的组件和关系组成的单一系统中来理解所有内容时,我就会陷入困境。

提前致谢, 加勒特


适合人类推理的代码(我们称之为“源代码”)需要经过几个阶段的翻译才能被底层硬件(例如CPU或GPU)物理执行:

  1. 源代码。
  2. [可选]中间代码(例如.NET MSIL 或 Java 字节码)。
  3. 与目标一致的机器代码指令集架构 http://en.wikipedia.org/wiki/Instruction_set_architecture.
  4. 实际上翻转硅中逻辑门的微代码。

These translations can be done in various phases of the program's "lifecycle". For example, a particular programming language or tool might choose to translate from 1 to 2 when the developer "builds" the program and translate from 2 to 3 when the user "runs" it (which is typically done by a piece of software called "virtual machine"1 that needs to be pre-installed on user's computer). This scenario is typical for "managed" languages such as C# and Java.

或者它可以翻译自1 to 3直接在构建时进行,这对于“本机”语言(例如 C 和 C++)很常见。

之间的翻译3 and 4几乎总是由底层硬件完成。从技术上讲,它是“运行时”的一部分,但通常被抽象出来,并且对开发人员来说基本上是不可见的。

术语“编译时”通常表示从1 to 2 (or 3)。在程序实际运行之前,可以在编译时完成某些检查,例如确保传递给方法的参数类型与方法参数的声明类型匹配(假设该语言是“静态类型”)。越早发现错误,就越容易修复,但这必须与灵活性相平衡,这就是为什么某些“脚本”语言缺乏全面的编译时检查的原因。

术语“运行时”通常表示从2 (or 3)一直到4。甚至可以直接翻译1在运行时,正如所谓的“解释语言”所做的那样。

有些问题在编译时无法捕获,您必须使用适当的调试技术(例如调试器、日志记录、分析器等)来在运行时识别它们。运行时错误的典型示例是当您尝试访问不存在的集合中的元素时,该元素可能会在运行时表现为异常,并且是执行流程对于编译器来说过于复杂的结果在编译时“预测”。

“调试时间”只是调试器附加到正在运行的程序(或者您正在监视调试日志等)时的运行时间。


1 Don't confuse this with virtual machines that are designed to run native code, such as VMware or Oracle VirtualBox.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行时和编译时有什么区别? [关闭] 的相关文章

随机推荐

  • Wix - 安装然后运行 ​​powershell 脚本

    我知道有几篇关于 Wix 和 PowerShell 脚本的帖子 但在尝试了这些帖子中的解决方案后 我仍然没有得到我想要的结果 为了解释我的情况 我创建了一个 Wix 安装项目 它将从我的本地计算机 运行 Windows 7 获取 2 个 P
  • 针对特定文件扩展名的 Android 意图过滤器?

    我希望能够从网络下载具有特定扩展名的文件 并将其传递给我的应用程序来处理它 但我无法弄清楚意图过滤器 文件类型不包含在 mimetypes 中 我尝试使用
  • 在 Agda 中对 ST monad 进行建模

    最近这个所以问题 https stackoverflow com questions 33975270 can a st like monad be executed purely without the st library促使我在 Ha
  • 使用 Wordpress Super Cache 从缓存中排除动态值

    我正在使用超级缓存插件 一段时间以来 我一直在寻找解决方案 但没有成功 我需要禁用文件中一个函数的缓存functions php add shortcode custom counter example shortcode function
  • Webpack - Yaml -> JSON -> 提取文件

    我有一个包含一些翻译的 YAML 文件 我需要将这些文件转换为 JSON 文件 我尝试过使用yaml import loader and json loader但我收到错误 这是我的设置 const ExtractTextPlugin re
  • Java中的多线程解压

    因此 我尝试在 Java 中对 zip 文件进行只读访问 以多线程方式解压缩 因为我的 ZipFile ZipEntry 标准简单单线程解决方案使用枚举和输入流以及其他结果导致它采取大约需要整整五秒才能将一个 50 兆的 zip 文件解压到
  • Flutter:我应该在哪里调用 SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark)

    在我的 flutter 应用程序中 屏幕 A 没有 AppBar 所以我打电话SystemChrome setSystemUIOverlayStyle SystemUiOverlayStyle dark 在构建中 在另一个具有 AppBar
  • 加载后删除程序集

    我正在尝试使用以下代码加载 MSIL 程序集 string PathOfDll PathOfMsILFile Dll Assembly SampleAssembly SampleAssembly Assembly LoadFrom Path
  • React - 将对象转换为具有属性的对象数组

    我有以下对象 data name 1 a name 2 b name 3 b 如何转换为保留名称和数据 a b 的对象数组 以便我可以为传入名称和数据的每个对象映射和渲染组件 如果您使用reduce函数 您可以执行以下操作来实现您的目标 O
  • 确定实施 sql server 触发器的一些缺点吗?

    我计划在所有 DML 语句上实现触发器以进行日志管理 因此 请确定这样做是否存在一些问题或缺点 我认为这个 SQL Server MVP 博客post http blog sqlauthority com 2007 05 24 sql se
  • 比 Stream.peek() 更好的方法

    peek 主要用于调试 如果我想在流中间调用流上的方法来更改流对象的状态 该怎么办 Stream of Karl Jill Jack map Test new peek t gt t setLastName Doe 我可以做 Stream
  • 为什么C++中的虚函数表指针(vfptr)不能是静态的?

    如果类的所有对象的虚函数表都是相同的 那么为什么指向该表的指针 vfptr 不能是静态的并在所有对象之间共享 vtable本质上是静态的 但是您实际上需要对象内部的 vptr 成员来执行虚拟调度和其他 RTTI 操作 在 vptr 实现上
  • 剪辑路径在 SVG 精灵中不起作用

    现场示例位于http codepen io RwwL pen xbNLJp http codepen io RwwL pen xbNLJp 我使用以下方法将 SVG 包含在应用程序中
  • Python 更新全局变量

    谁能告诉我我的代码中做错了什么 为什么我无法更新我的全局变量 据我了解 如果它是全局变量 我可以在任何地方修改它 如果 numpy 正在创建一个新数组 当我使用 np delete 时 那么删除 numpy 数组中的元素的最佳方法是什么 i
  • 是否可以停止AWS ElastiCache集群中的节点

    我有一个用于开发的AWS帐户 由于开发人员位于一个时区 我们会在下班后关闭资源以节省使用量 是否可以暂时关闭elasticache集群中的节点 我在 cli 参考中找到的只是 删除集群 http docs aws amazon com cl
  • 如何在 C# 中比较两个字典

    我有两本通用词典 两者具有相同的键 但它们的值可以不同 我想将第二本词典与第一本词典进行比较 如果它们的值之间存在差异 我想将这些值存储在单独的字典中 1st Dictionary key Value Barcode 1234566666
  • 为什么 0010 在 java 中的数组中给出不同的结果

    如果我在数组输出中的数字值之前放置 00 或 0 就会变得不同 int arr new int 3 2 arr 0 0 00 arr 0 1 01 arr 1 0 10 arr 1 1 0011 arr 2 0 0020 arr 2 1 2
  • Matlab 条形图中的图例

    如何在 Matlab 中的条形图中绘制图例 这是代码 Y 1 5056 0 72983 3 4530 3 2900 1 4839 12 9 n length Y h bar Y colormap summer n grid on l cel
  • HTML Javascript - 防止从 dom 树的子节点执行脚本

    我从不可信的来源下载了一些 html 树 并使用它来将内容显示为页面中某些 HTML div 的子级 但是 下载的代码存在运行脚本 或在事件处理程序中执行脚本的危险 在 HTML 中是否可以像使用标签定义脚本一样 执行
  • 运行时和编译时有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 那么什么是运行时呢 是执行无法在特定处理器上运行的半编译代码的虚拟机吗 如果是这样 那么什么是虚拟机 是否是另一个将半编译代码进一步转