编译器需要多少内存空间?

时间:2013-10-13 15:52:50

标签: memory compiler-construction

我读过一篇关于BrainFuck的文章,这是一种缓慢的,用户不友好的语言,其目标只是创建世界上最小的编译器。根据{{​​3}},他们已经将它降低到MS-DOS的 98字节

这看起来非常小,但我很难想象它有多小。当我查看wikipedia等下载页面时,文件(取决于操作系统)小到 27MB 。与BrainFuck相比,这是巨大的,但根据我的理解,这还包括随附的所有库。

有没有办法查找编译器占用的实际空间?我很想将BrainFuck与Java,C ++,Assembler等其他编译器进行比较(可能还有一些)。

1 个答案:

答案 0 :(得分:1)

  

有没有办法查找编译器占用的实际空间?

当然,下载所述编译器并检查他们占用多少磁盘空间;并且不要忘记考虑他们的依赖关系。

但是对于像Oracle的Java编译器这样的东西来说可能会很棘手;你下载的内容不仅仅包含javac,它是将Java编译为Java字节码的实际模块。该模块隐藏在tools.jar文件中,通过检查,您可以看到编译器大约需要3 MB。

但话又说回来,那个编译器是用Java编写的,所以你必须有一些JVM +运行库来运行它;我不知道什么是可以运行它的最小包,但我猜它至少会有几个好的MB。

即使编译为本机代码的语言通常也需要一些运行时库(例如the C standard library) - 如果你想计算那些大小,那就是你的调用。

  

我很想将BrainFuck与其他编译器(如Java,C ++,汇编程序(可能还有更多))进行比较

列表中的所有项目都不是编译器。 Brainfuck,Java和C ++是语言;汇编程序是将汇编语言转换为目标代码的工具的通用名称。您要比较的是具体实现。

在任何情况下,请记住编译器通常针对小磁盘空间进行优化 - 即使它们是,这也是一个次要目标。此外,基于此单独比较编译器是没有意义的 - 例如,上面的Brainfuck编译器没有优化可言(而且Brainfuck无论如何都是一种极低级别的语言)。你真的可以将它与一种更具表现力且被编译器积极优化的高级语言进行比较吗?我没有看到这一点。