gpt4 book ai didi

go - GC 如何在没有单独的运行时或 VM 的情况下工作?

转载 作者:IT王子 更新时间:2023-10-29 01:53:50 25 4
gpt4 key购买 nike

我的理解是,用 Go 编写的应用程序的可执行文件可以独立运行,而不需要在机器上安装 Go。

通常我的理解是 GC(垃圾收集)由 VM 处理。在这种情况下,如果应用程序在没有这样的运行时的情况下独立运行,GC 将如何处理?

关于此的帮助和相同的文档会很好。

最佳答案

my understanding is that the GC (Garbage Collection) is handled by a VM.

以支持编程语言的典型VM为例以 GC 为特色,(编译形式)一个程序语言实际上是由 VM 管理的:VM 运行程序代码并定期进行干预以执行 GC 任务。

关键是每个程序运行在这样的VM中可以将其 VM 视为其执行环境的一部分。

还有一个很关键的地方就是这样的VM代表了所谓的 runtime system对于该编程语言的所谓执行模型

In this case, if the application is running independently without such a runtime how is GC handled?

与 VM 案例非常相似。

由库存工具链编译的每个 Go 程序(可以从 the official site 下载)包含与程序本身链接的 Go 运行时。每个编译后的 Go 程序的创建方式是,当程序运行时,程序的入口点首先执行运行时它负责初始化自身,然后是程序,一旦完成,执行将转移到程序的 main()

除此之外,不断初始化的 Go 运行时运行一段或多段自己的代码,其中包括goroutine 调度程序和 GC(它们在 FWIW 中紧密耦合)。

如你所见,与VM的不同之处在于,在那种情况下运行时是运行程序的“外部”,而在Go 程序的(典型)情况是“沿着”正在运行的程序。


Go 语言规范中没有任何内容要求必须使运行时可用的精确方式运行程序。

例如,Go 1.11 可以编译成 WASM ,并且运行时是部分由 Go 运行时的链接代码提供部分——由 WASM 主机(通常是浏览器)。

再举一个例子,GCC具有 Go 前端,与“股票”相反Go toolchan,在可能的平台上,GCC 支持以编译形式的方式构建 Go动态 链接到一个包含大多数内容的共享库Go 运行时代码(和标准库的代码)。在这种情况下,编译后的 Go 程序不包含运行时代码,但它在加载程序时被链接然后它也与程序本身一起工作。

完全有可能为将使用 VM 的 Go 程序。

关于go - GC 如何在没有单独的运行时或 VM 的情况下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com