12.14.1 Near or Far Data
If variables are allocated in the near data space, the compiler is often
able to generate better (more compact) code than if the variables are not allocated in
near data. If all variables for an application can fit within the 6 KB (or 4 KB) of near
data, then the compiler can be requested to place them there by using the default
-msmall-data
command line option when compiling each module. If the
amount of data consumed by scalar types (no arrays or structures) totals less than 6 KB
(or 4 KB), the default -msmall-scalar
, combined with
-mlarge-data
, may be used. This requests that the compiler arrange
to have just the scalars for an application allocated in the near data space.
If neither of these global options is suitable, then the following alternatives are available.
- It is possible to compile some modules of an application using the
-mlarge-data
or-mlarge-scalar
command-line options. In this case, only the variables used by those modules will be allocated in the far data section. If this alternative is used, then care must be taken when using externally defined variables. If a variable that is used by modules compiled using one of these options is defined externally, then the module in which it is defined must also be compiled using the same option, or the variable declaration and definition must be tagged with the far attribute. - If the command-line options
-mlarge-data
or-mlarge-scalar
have been used, then an individual variable may be excluded from thefar
data space by tagging it with thenear
attribute. - Instead of using command-line options, which have module scope,
individual variables may be placed in the far data section by tagging them with the
far
attribute.
The linker will produce an error message if all near variables for an application cannot fit in the 6 KB (or 4 KB) near data space.