PR# 19147 C compiler runs out of memory when system finalized
Problem Report Summary
Submitter: prestoat2000
Category: C Compilation
Priority: High
Date: 2015/10/22
Class: Support
Severity: Critical
Number: 19147
Release: 15.08.97862
Confidential: No
Status: Closed
Responsible:
Environment: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0
Synopsis: C compiler runs out of memory when system finalized
Description
I added some classes (not that many) to a large system. Now, when I try to finalize that system (keeping assertions) on Solaris SPARC 32-bit, the C compiler runs out of memory when doing code generation (cg process) for the C1 directory. This is one of our most important programs. It appears that there are too many .c files (or too many large .c files) included in big_file_C1_c.c. Is there any way to control how many .c files get included in each "big_file" in finalized (or workbench) mode? If so, how? If not, how can I resolve this issue? I confirmed that if I remove the #include for one of the large .c files from big_file_C1_c.c, then the compilation works.
To Reproduce
Problem Report Interactions
Since you have provided a solution for this problem (control of number of C files per directory) and since I also found a workaround, I'm closing this report.
I found a workaround. One class had 6000+ STRING constants, but we really only need to reference less than 100 of them. The class was generated from data in our database. Keeping only the constants we currently need allowed the compilation to finish. Thanks for implementing the other workaround (workbench and final basket limits) in case we have problems with another class with many STRING constants.
A new setting is provided in rev#98053 of EiffelStudio 15.11 intermediate release. ".../studio/eifinit/general.cfg" can be used to specify a maximum limit of C files that can be generated in one directory. The new configuration options are "workbench_c_basket_limit" and "finalized_c_basket_limit" and should be set to a positive integer. The current default values are as before: 33 and 50 respectively.
We are going to implement a compiler option in the general.cfg file to change the default of roughly 100 files per C directory. This is the short term solution. We are going to think a little bit more at the long term solution.
Any word on ideas for a fix or workaround? This is going to become a big issue for us very soon, because for one of our most critical systems, which regularly needs modification, the "cg" process of the C compiler almost runs out of memory. If I add anything significant, like I will soon need to do, "cg" will run out of memory and the C compilation will fail.