Some records in a
file, such as
those corresponding to parameters and constant block I/O, can have extremely large data
value vectors embedded in them. Such a vector can cause significant memory overhead during
code generation because the values must be maintained as text in memory during this process.
To avoid such overhead, by default the Simulink® software does not write out the entire data value vector into
. Instead, it writes a key called
a data reference that can be used during code generation to access
the data directly from Simulink. If the data is not mutated during code generation, it is efficiently streamed
to disk when the actual code containing the data values is written out.
A data reference has the format
is a numeric value that tells
Simulink which data is being referenced. TLC directives such as
GENERATE_FORMATTED_VALUE store data references in unexpanded format in
memory. When the generated code is written out to disk, the data values expand to the actual
By default, Simulink writes a data reference to
in place of a data vector whose
length is 10 or more. To change the maximum length of a vector that can appear literally in
the file, use:
set_param(0, 'RTWDataReferencesMinSize', maxlen)
Simulink replaces a vector as long or longer than
maxlen with a data
reference when it creates
maxlen as an integer or as
inf disables data references. The complete value set of every vector,
however long, then appears literally in
and occupies text memory during
Setting an explicit
affects only the current MATLAB® session. To set the value across sessions, include a
set_param command in your
startup.m file, or
automate execution of the command when MATLAB launches.
You can explicitly expand a data reference by using the
GENERATE_FORMATTED_VALUE built-in function with the optional third
expand argument. Commands such as
FEVAL may cause a
data reference to be expanded to the full form.
Either turning off data references completely or expanding select parameters in TLC can cause significant text memory overhead during the code generation process. During most common code generation tasks, it is unnecessary to have the expanded data vector in memory and pay the price of the additional overhead. Avoid expanded data vectors unless no alternative exists.
file that contains data
references cannot be used in isolation to restart a custom code generation process. The data
references within it become stale once the code generation process is completed. Attempting
to start a code generation process using only this file may result in unpredictable behavior
and memory segmentation faults.