[MLton-user] gcc 4.1.1 crash "virtual memory exhausted: Cannot
allocate memory" with mlton-20051202 on solaris
fluet at tti-c.org
Sun Jan 14 13:36:32 PST 2007
> I tried to use the MLton option -coalesce with different values (2048 and
> 1024) but it seems that it has no effect on the biggest files. Am I missing
No, you are not missing anything. The -coalesce option instructs the
compiler to combine multiple Machine IL functions into one 'chunk' to be
emitted as a single C function. However, the option has no effect on
Machine IL functions whose size is already above the coalesce limit.
The two largest Machine IL functions (and, hence, the largest .c files)
usually correspond to the initialization of global values and the other
corresponds to the main control-flow path of the program. On large
input programs, both of these can be large.
> In my case, there is only one file which fails to build with -01. I could
> notice that when I use the -keep g option, the .c files are named
> sources.0.c, sources.1.c . sources.234.c and the file that fails to build is
> sources.234.c. I guess it is not a coincidence.
If it is the very last .c file, then it is probably the initialization
of global values. There isn't a general mechanism in place for
splitting large Machine IL functions into smaller functions, though the
compiler could be extended to do so. In any case, the initialization of
global values is only executed once, so compiling that file with -O0
would have a negligible impact on performance, although it is cumbersome
to compile the .c files outside of mlton.
More information about the MLton-user