【发布时间】:2011-04-21 04:05:41
【问题描述】:
让我们比较一下 c 和 go: Hello_world.c:
#include<stdio.h>
int main(){
printf("Hello world!");
}
Hello_world.go:
package main
import "fmt"
func main(){
fmt.Printf("Hello world!")
}
同时编译:
$gcc Hello_world.c -o Hello_c
$8g Hello_world.go -o Hello_go.8
$8l Hello_go.8 -o Hello_go
还有……这是什么?
$ls -ls
... 5,4K 2010-10-05 11:09 Hello_c
... 991K 2010-10-05 11:17 Hello_go
大约 1Mb 你好世界。你在跟我开玩笑吗? 我做错了什么?
(剥离 Hello_go -> 仅限 893K)
【问题讨论】:
-
在 x86_64 Mac 上,“Hello World”二进制文件是 1.3 MB,就像我假设的 x64 Linux 机器上一样。相比之下,ARM x32 二进制文件与 x86_32 二进制文件一样大。大小很大程度上取决于相应架构的“字”长度。在 x32 机器上它是 32 位,在 x64 上它是 64 位宽。因此,x32“Hello World”二进制文件大约小了 30%。
-
@Nick:考虑到 GO 作为一种系统语言进行营销,我认为这是一个公平的问题。我在系统中工作,我们并不总是拥有 4GB 以上的 RAM 和巨大的磁盘。
-
一个 893kb 的可执行文件与“4GB+ 的 RAM 和一个巨大的磁盘”相去甚远,正如其他人已经指出的那样,这包括静态链接的 go 运行时,很容易被排除在外。跨度>
-
是的,这相差甚远,我知道答案,但这是一个有效的问题,“谁在乎内存消耗”的态度往往来自于在不关心内存消耗的系统上工作问题。你似乎认为无知是可以的,最好不要问问题。我再说一遍;有时〜1MB很多,你显然不在那个世界上工作。编辑 - 你在谷歌工作!哈哈. 虽然我仍然不明白“谁在乎”的态度。
-
显然在 Java 部门 ;)
标签: go