Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:操作系统:runtime

Runtime

https://en.wikipedia.org/wiki/Runtime_system


In computer programming, a runtime system or runtime environment is a sub-system that exists both in the computer where a program is created, as well as in the computers where the program is intended to be run. The name comes from the compile time and runtime division from compiled languages, which similarly distinguishes the computer processes involved in the creation of a program (compilation) and its execution in the target machine (the run time).

对Runtime的理解

自己的理解:比如Go有垃圾回收,程序员写的代码在执行的时候,Go自带的「某些逻辑」也在执行,负责垃圾回收,这个Go自带的逻辑的部分(不是用户写的)就是Runtime
AI整理:Runtime(运行时),在编程语言中,指的是程序运行时所依赖的环境或组件集合,这部分不是程序员自己写的业务逻辑,而是语言自身或标准库提供的支持机制。
它通常包括:内存管理(比如垃圾回收)、调度(如 goroutine 调度)、异常处理(如 panic/recover)、类型信息(运行时类型反射)、系统调用的封装(如操作系统接口)、栈增长、协程栈切换逻辑等。
总结:Runtime 是编程语言在程序运行时自动参与的一套底层机制,比如内存管理、调度、异常处理等,不是程序员显式调用的逻辑,但对程序能正常运行至关重要。

那么这部分Runtime,在编译的时候,是打包到了编译结果里面吗?
AI回答:在大多数编译型语言中,Runtime 的一部分是会被“打包进编译结果”的,但具体情况依语言而异。
Go 是静态链接语言(除非你显式用动态库),编译器会:把你写的代码编译成机器码,也会把 Go 自带的 runtime 包(比如 runtime, sync, time 等)中被用到的部分打包进最终的二进制文件。($GOROOT/src/runtime/ 是Go的Runtime代码)
C/C++:只依赖操作系统,runtime 极少,通常不叫 runtime,而是手动管理一切

C/C++应该没有Runtime吧?C/C++的设计哲学就是0额外负担。
AI回答:C/C++ 几乎没有 Runtime,但 不是完全没有,C/C++ 仍然有“最小的” Runtime 支撑。为什么通常说 C/C++ 没有 Runtime?因为这些运行时逻辑是 极小的(和 Go/Java 的 GC、调度器相比几乎可以忽略);你可以选择不用它们:比如禁用 RTTI、禁用异常、用 main() 作唯一入口,不用全局对象。C/C++ 的确追求 “零运行时负担”,但实际上仍然有一些非常底层、微量的 Runtime 逻辑,尤其在 C++ 中更明显一些;不过它们比 Go/Java 的 Runtime 简单得多,也更可控。

C/C++的这部分也是被打包到编译结果中的吗?
AI回答:C/C++ 的 runtime 虽然极简,但确实存在,而且会在 链接阶段被打包进最终的编译结果 中。这部分包括 _start 函数、构造函数调用、异常处理支持等,是确保程序正确启动和运行的基础。

/var/www/DokuWikiStick/dokuwiki/data/pages/程序/操作系统/runtime.txt · Last modified: 2025/07/12 16:31 by zhonghui