我听说过类似“C运行时”,“Visual c++ 2008运行时”,“。NET公共语言运行时”等。
什么是“运行时”?
它是用什么做的?
它如何与我的代码交互?或者更准确地说,我的代码是如何被它控制的?
在Linux上编写汇编语言时,我可以使用INT指令进行系统调用。那么,运行时只是一堆将低级函数包装成更抽象和高级函数的预制函数吗?但这看起来更像是库的定义,而不是运行时的定义吗?
“运行时”和“运行时库”是两个不同的东西吗?
加1
这些天,我在想也许运行时与所谓的虚拟机(如JVM)有一些共同之处。下面这句话引出了这样的想法:
这个编译过程非常复杂,很难分解
有几个抽象层,这些抽象层通常包括三个
翻译器:编译器、虚拟机实现和
汇编程序。——《计算系统的要素》(导论,
通往硬件领域的道路)
加上2
《专家C编程:深层C语言秘密》一书。第6章运行时数据结构是对这个问题的有用参考。
加3 - 2021年2月28日上午7:31
以下是我对处理器设计有所了解后的一些看法。整个计算机就是多个层次的抽象。它从基本的晶体管一直到运行的程序。对于任何抽象级别N,它的运行时间是直接的抽象级别N-1,在它下面。是上帝给了我们抽象的0级。
在我的理解中,运行时就是它的确切含义——程序运行的时间。你可以说某些事情发生在运行时/运行时或编译时。
我认为运行时和运行时库应该是(如果不是的话)两个独立的东西。“C运行时”对我来说似乎不正确。我称之为“C运行时库”。
你其他问题的答案:
我认为“运行时”这个术语可以扩展到包括程序运行时的环境和上下文,因此:
它由程序运行期间所有可以称为“环境”的东西组成,例如其他进程、操作系统和已使用库的状态、其他进程的状态等
在一般意义上,它不与你的代码交互,它只是定义你的代码在什么情况下工作,在执行过程中什么是可用的。
这个答案在某种程度上只是我的观点,而不是事实或定义。
我发现下面的文件夹结构为理解什么是运行时提供了一个非常有洞察力的上下文:
你可以看到有“源代码”,有“SDK”或“软件开发工具包”,然后有运行时,例如。在运行时运行的东西。内容如下:
win32压缩包包含。exe -s和。dll -s。
所以如。C运行时应该是这样的文件——C运行时库,.so-s或.dll -s——你在运行时运行,通过它们(或它们的内容或目的)包含在C语言的定义中(在“纸上”)而变得特别,然后由你选择的C实现实现。然后你得到那个实现的运行时,使用它并在它的基础上进行构建。
也就是说,稍微分化一下,你的新的基于c语言的程序的用户将需要的可运行文件。作为一个基于C的程序的开发者,你也需要,但是你也需要C编译器和C库头文件;用户不需要这些。