ocaml 4.01.0→4.02.1,二进制大小变大

时间:2014-10-30 11:59:22

标签: size ocaml native-code

在Ubuntu 14.04上,32位:

➥ cat test.ml
let () = print_endline "hello";

➥ opam switch list | grep " C "
4.01.0  C 4.01.0  Official 4.01.0 release

➥ ocamlopt test.ml 
➥ ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 13:29 a.out

➥ opam switch 4.02.0
➥ eval `opam config env`

➥ ocamlopt test.ml 
➥ ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171122 Oct.  30 13:30 a.out

➥ opam switch 4.02.1
➥ eval `opam config env`

➥ ocamlopt test.ml 
➥ ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 14:08 a.out

可执行规模变得越来越大:158569→171122→171196。

在更复杂的应用程序中,我的文件大小会有更大的增加。

任何想法如何解决?

更新#1

尝试strip

➥ strip -V | head -n 1
GNU strip (GNU Binutils for Ubuntu) 2.24

➥ ls -l
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 15:22 a.4.01.0.out
-rwxrwxr-x 1 shorrty shorrty 117368 Oct.  30 15:26 a.4.01.0.out.stripped
-rwxrwxr-x 1 shorrty shorrty 171122 Oct.  30 15:03 a.4.02.0.out
-rwxrwxr-x 1 shorrty shorrty 127580 Oct.  30 15:26 a.4.02.0.out.stripped
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 15:21 a.4.02.1.out
-rwxrwxr-x 1 shorrty shorrty 127612 Oct.  30 15:26 a.4.02.1.out.stripped
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 15:21 a.out

继续增长:117368→127580→127612

更新#2

尝试选项-compact,没有效果:

➥ opam switch 4.01.0 && eval `opam config env`

➥ ocamlopt test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 22:02 a.out

➥ ocamlopt -compact test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 22:03 a.out

➥ opam switch 4.02.1 && eval `opam config env`

➥ ocamlopt test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 22:05 a.out

➥ ocamlopt -compact test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 22:05 a.out

尝试选项-inline,也没有效果:

➥ opam switch 4.01.0 && eval `opam config env`

➥ ocamlopt -inline 0 test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 22:07 a.out

➥ ocamlopt -inline 1 test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 158569 Oct.  30 22:07 a.out

➥ opam switch 4.02.1 && eval `opam config env`

➥ ocamlopt -inline 0 test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 22:08 a.out

➥ ocamlopt -inline 1 test.ml && ls -l a.out
-rwxrwxr-x 1 shorrty shorrty 171196 Oct.  30 22:09 a.out

1 个答案:

答案 0 :(得分:3)

您的代码没有更改,但它调用了在4.01和4.02之间更改的pervasives模块。

值得注意的是,有关格式的部分已更改为使用基于GADT的格式而不是字符串。 这显然使得to_string,of_string和concatenation(相当)更重。

有关详细信息,请参阅this discussion