Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] Memory leak with native code.
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <xavier.leroy@i...>
Subject: Re: [Caml-list] Memory leak with native code.
>     David> I have a fairly complex program that has numerous callbacks
>     David> between Ocaml, C and back to Ocaml (I'm using Debian's
>     David> 3.06).
>     David> If I compile my program byte-code, it works well.
>     David> However, if I compile it native, it seems to leak memory,
>     David> just consuming more and more memory as it runs.
> I assume your plateform is x86 on Debian. Because of the small number
> of registers, tail-recursion is limited to 5 arguments (if my memory
> serves me well). For more arguments, a tail-rec is not a loop on x86.

As of release 3.06, tail recursion (tail calls to the same function)
are properly implemented on all platforms regardless of the number of
arguments.  Tail cross-recursion, or more generally tail calls to
another function, are not supported if the number of arguments is
greater than a processor-dependent number: 5 for x86, more for RISC

That would explain why a program compiled to native code uses more
stack space than when compiled to byte code.  However, there is no
evidence that David's problem is related to stack space.

You can track Caml heap space consumption by running both programs
(native and byte-code) with the OCAMLRUNPARAM environment variable set
to "v=4".  Normally, you should see roughly the same sequences of
"Growing heap to ..." messages.

A third source of leaks is the C code itself.  A good tool to track
these leaks is valgrind.

- Xavier Leroy
To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: