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

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(使用前将#替换为@)

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

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • sbt 使用不同选项编译任务

    我有一个基本的 sbt 项目 我想用相同的源文件打包两个 jar 但使用不同的选项进行编译 因此 一个项目 2 个编译 但具有不同的选项 scalacOptions 和 2 个 jar 作为输出 我不想执行 sbt 两次 更改选项 有人有想
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 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 目前不接受答案 那么什么是运行时呢 是执行无法在特定处理器上运行的半编译代码的虚拟机吗 如果是这样 那么什么是虚拟机 是否是另一个将半编译代码进一步转