11.3.2 Assigning Output Sections to Regions
Once the sizes of all output sections are known, they are assigned to memory regions. Normally a region is specified in the output section definition. If a region is not specified, the first defined memory region will be used.
Memory regions are filled sequentially, from lower to higher addresses,
in the same order that sections appear in the section map. Memory reserved for sections
that have been marked with the address attribute will be avoided. A
location counter, unique to each region, keeps track of the next available memory
location. There are two conditions which may cause gaps in the allocation of memory
within a region:
- The section map specifies an absolute address for an output section.
- The output section has a particular alignment requirement.
In either case, any intervening memory between the current location counter and the absolute (or aligned) address is skipped. Once a range of memory has been skipped, it is available for use by the best-fit allocator. The exact address of all items allocated in memory may be determined from the link map file.
Section alignment requirements typically arise in DSP programming. To
utilize modulo addressing, it is necessary to align a block of memory to a particular
storage boundary. This can be accomplished with the aligned attribute in C, or with the .align
directive in assembly language. The section containing an aligned memory block
must also be aligned, to the same (or greater) power of 2. If two or more input sections
have different alignment requirements, the largest alignment is used for the output
section.
