2014-10-30 31 views
4

在Ubuntu 14.04,32位:ocaml的4.01.0→4.02.1,二进制大小变大

➥ 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 
+0

有趣的是,你试过剥离? – ivg 2014-10-30 12:20:38

+0

在帖子中增加了关于strip的信息。 – shorrty 2014-10-30 12:31:56

+2

后一版本增加了更积极的内联,这可以解释它。 – PatJ 2014-10-30 14:12:05

回答

3

您的代码并没有改变,但它会调用pervasives模块,4.01和4.02之间变化。

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

查看this discussion了解更多详情。