Go语言是否与CPU相关?

6

Go语言是否与CPU有关?

我知道它支持x86、x86_64和ARM。它是否有一些CPU相关的代码,比如汇编代码块?

PS 我表达得不够清楚。Go语言的实现是否与CPU有关?

我不希望在我的程序中添加ARM汇编代码。我想知道是否只能在x86(_64)和ARM上编译Go程序,而所有其他平台都不受支持。


3
取决于你对“CPU-dependent”的理解。至少有两个Go编译器存在(Google和GNU),它们的平台支持不同。Go语言本身是可移植的,对CPU做了很少的假设。 - Fred Foo
1
int类型可以是64/32位宽。或者你是在谈论为了效率而编写的汇编函数(例如RC4)?你能举个例子说明你所说的CPU依赖性吗? - loreb
我不知道Go语言是否依赖于CPU。Go官网上说Go只能在x86(_64)和ARM架构上运行。为什么呢?我想要为ddwrt路由器编写代理服务器,但它使用的是MIPSEL CPU。 - Shuriken
1个回答

12

Go语言是一种编译型语言,因此最终结果确实是(特定于CPU的)机器代码。

$ echo 'package main\nfunc main(){ println("hello world") }' > hello.go
$ go build hello.go
$ objdump -D hello | head

hello:     file format elf32-i386


Disassembly of section .text:

08048c00 <main.main>:
 8048c00:   65 8b 0d 00 00 00 00    mov    %gs:0x0,%ecx
 8048c07:   8b 49 f8                mov    -0x8(%ecx),%ecx
 8048c0a:   3b 21                   cmp    (%ecx),%esp

所以,你不能仅仅拿ARM编译的可执行文件,在x86上运行。

尽管如此,Go语言对于不同操作系统和架构的交叉编译有出色的支持, 因此在大多数情况下,你不需要一堆运行不同操作系统的机器(虚拟或实际)来为这些目标编译程序。


它提到了x86和ARM,但还有许多其他平台。我明白如果我编译为ARM,那么它将在ARM上运行。但这意味着Go将无法在MIPS、MIPSEL或PowerPC上运行。 - Shuriken
你提供的链接提到了OpenBSD和Plan9操作系统,它们并未在官方页面(Windows/FreeBSD/Linux/MacOSX)中提到。 - Shuriken
1
官方网站确实提到了Plan 9和OpenBSD。虽然go工具链不支持MIPS或PowerPC,但似乎这些架构由gccgo支持 - justinas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接