Informix Error -4392: The 4GL compiler has run out of data space memory to contain the 4GL program symbols. If the program module is very large, dividing it into separate modules may alleviate the situation.
Cause and resolution
The 4GL compiler has run out of data space memory to contain the 4GL program symbols. If the program module is very large, dividing it into separate modules may alleviate the situation.
Reorganize your program source as a group of modules that can be compiled separately. Alternatively, revise the program so that fewer unique symbols are required, for instance by replacing many similar variables with an array. This error might also be related to the CONSTRUCT statement. If there is a CONSTRUCT over a large number of fields, moving that statement to a function and putting the function in a different source module might alleviate the problem with no other changes.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-4392 fires when the compiler runs out of memory to hold a program's symbol table — per the
official guidance, this often happens with very large modules, or a CONSTRUCT statement
covering a large number of fields.
- A program module too large for the compiler's symbol-table memory, per the official guidance — the first named cause.
- A
CONSTRUCTstatement over a large number of fields, per the official guidance — a specifically named related cause.
Solutions / Resolution
- Reorganize the program source into separately-compiled modules, per the official guidance.
- Revise the program to require fewer unique symbols, per the official guidance — for example, replacing many similar variables with an array.
- If a large
CONSTRUCTis involved, move that statement to a function in a different source module, per the official guidance — this alone might alleviate the problem.
Examples
Moving a large CONSTRUCT to its own module
Extract the function containing the large CONSTRUCT statement into its own source module,
compiled separately from the rest of the program.
Diagnostic Checks
- Check the size of the program module, and whether a large
CONSTRUCTstatement is involved, before splitting the source accordingly.
Related Errors / Related Topics
- -4339 — "4GL has run out of data space memory." A related memory-exhaustion error, covering the general runtime/compile-time case rather than the symbol-table-specific condition here.
The compiler ran out of memory for the program's symbols — split the module, reduce unique
symbols, or relocate a large CONSTRUCT to its own module.