Language agnostic 什么是假定的运行时环境;“无间接费用”;系统语言? 具体来说,我比其他人更谈论C++和锈蚀。我不理解C++在运行时有一个“运行时”,java和C java有一个运行时——Java和C语言运行在一个虚拟机的上面,有自己的封装抽象,例如, < >例如,使用C++的虚拟表。我们是否考虑了C++ >运行时功能的一部分,或者我们讨论的是VC++的C++结构?我们可以考虑新< /COD>和删除 > C++运行时环境的一部分吗?什么是运行时

Language agnostic 什么是假定的运行时环境;“无间接费用”;系统语言? 具体来说,我比其他人更谈论C++和锈蚀。我不理解C++在运行时有一个“运行时”,java和C java有一个运行时——Java和C语言运行在一个虚拟机的上面,有自己的封装抽象,例如, < >例如,使用C++的虚拟表。我们是否考虑了C++ >运行时功能的一部分,或者我们讨论的是VC++的C++结构?我们可以考虑新< /COD>和删除 > C++运行时环境的一部分吗?什么是运行时,language-agnostic,runtime,Language Agnostic,Runtime,例如,这里我们有一个,它描述为: 可以将Rust运行时视为一组代码,这些代码支持 像I/O、任务生成、TLS等服务。它本质上是一个 使程序能够执行的对象的短暂集合 普通任务更容易完成 但这不是标准库或语言功能的功能,不是实际的运行时吗?是什么构成了这个非常薄但存在的运行时?甚至Bjarne也表达了C++的思想,但是如果C++有运行时,这不是暗示C++确实有某种“后端”代码来编排它自己非常轻但仍然存在的抽象吗? TL;DR:在C++和RIST之类的语言环境中运行时和/或运行时环境是什么,它们被假定

例如,这里我们有一个,它描述为:

可以将Rust运行时视为一组代码,这些代码支持 像I/O、任务生成、TLS等服务。它本质上是一个 使程序能够执行的对象的短暂集合 普通任务更容易完成

但这不是标准库或语言功能的功能,不是实际的运行时吗?是什么构成了这个非常薄但存在的运行时?甚至Bjarne也表达了C++的思想,但是如果C++有运行时,这不是暗示C++确实有某种“后端”代码来编排它自己非常轻但仍然存在的抽象吗? TL;DR:在C++和RIST之类的语言环境中运行时和/或运行时环境是什么,它们被假定为“零开销”,没有“java”或“C”?
编辑:我怀疑我只是缺少了一些关于语义的东西…

C++需要一些在C之类的东西中不需要的东西

例如,它通常涉及异常处理的一些开销。尽管这可能不是严格要求的,但大多数系统至少有一点点顶级异常处理程序来告诉您,如果抛出了异常但没有捕获到任何地方,程序将关闭

它是否符合“运行时环境”的条件还存在疑问,但编译器也会生成代码来搜索堆栈,并在抛出异常时找到特定异常的处理程序

一方面,与完整的JVM相比,这是非常小的(几乎可以忽略不计)。另一方面,相对于JVM或Microsoft的CLR等默认情况,它相当大且复杂

至于零开销,这取决于你的观点。异常处理代码通常可以移出代码的主流,所以只要不抛出异常,就不会在执行速度方面造成任何开销。但是,它确实需要额外的代码,因此如果查看可执行文件的大小,可能(通常)会有相当大的开销。例如,快速查看一个“hello world”程序,看起来关闭异常处理会使VC++的可执行文件大小减少约2 KB

不可否认,2K并不是一大堆额外的代码——另一方面,这只是添加到本质上最简单的程序中的代码。对于一个真正能做点什么的程序来说,它无疑更重要

最后,大多数人真的有理由关心是不够的,但它确实存在


至于如何处理,它涉及到从标准库链接进来的代码和编译器生成的代码的组合(但具体细节因实现而异——例如,大多数32位Windows编译器使用Microsoft的结构化异常处理(在这种情况下,操作系统提供部分代码)但是对于64位Windows,我相信他们都能自己处理异常处理(这会增加可执行的大小,但是在速度方面会降低开销)。

标签和同时,你确定他的吗??我只会删除C++和生锈。<代码>动态CaseStudio< /Cord>是一个很好的例子:强制转换需要代码执行。(在运行时),但它不是任何可见库的一部分。它是平台需要提供的代码,您可以称之为“C++运行时库”这与托管翻译的入口点代码不同,它也由平台提供,但不在程序内调用。这是真的,C++确实需要系统的开销,但问题也在问,这些系统是否在运行时由程序中的补充运行时组件管理,或者如果是兴是按惯例编码的。也就是说java为你做GC;C++中显式地管理这个。但是异常呢?当然,我们不创建一个主循环,比如“代码>”(例外的是缓冲区!=空的)。或类似的东西——有某种组件可以做到这一点。它是如何实现的?它与标准库、编译器和我的代码有什么关系?您试图将“补充运行时组件”与“按约定编码”进行对比的意思(至少对我来说)并不完全清楚例如,结构中的位对齐通常由C本身自动处理,对吧?但是我不认为它需要运行时来确保它知道如何做到这一点。另一方面,C++需要某种外部系统来帮助处理异常或可能的虚拟行为。IN或“运行时”只是一个模糊概念,句号?@ VirmiLuZaZe:至少在最典型的实现中,C++不使用任何外部的虚拟机。所有涉及的都是由编译器直接生成的,或者是从标准库中链接的函数。