pour ta première question : comme je fait plutôt du Caml Light, je ne connais pas trop ocamlopt. Mais ce que je sais c´est que tu doit lui passer (mais je suppose que tu l´a fait) en argument ton fichier .ml et le fichier objet unix.cmx (ou unix.cmxa, je sais pas trop).
Et normallement ça suffit. Si ça ne marche pas, tu devrais poster sur les liste de discussion de OCaml qui sont sympathique (c´est des listes yahoo) ou sur fr.comp.lang.caml où tu aura certainement une réponse tout de suite.
A propos de ta deuxième question, c´est sur que si tu l´écris en C en allouant de gros tableauc plutot que éléments par élements tes listes, tu auras de meilleurs performance qu´en Caml. N´empêche bien écrit, ça peut être bon en Caml aussi. Tout dépend de savoir si tu veux absolument une vitesse maximum ou pas.
D´autrepart, le garbage collector de OCaml est asez bon et se fait dans un thread séparé à celui de ton programme, ce qui veut dire qu´il ne désalloue pas la mémoire dès qu´elle ne sers plus. Et si tu a besoin rapidement de mémoire, dans une certaine mesure, les free et les malloc "s´annule" respectivement. De ce point de vue, c´est très performant (sauf bien sûr si tu fait toute tes allocations, puis après seulement toutes tes dé-allocations).