5.3.1 Comm Directive
The .comm symbol, length [,
algn]
directive declares a common symbol named
symbol
.
When linking, a common symbol in one object file may be merged with a defined or common
symbol of the same name in another object file. If the linker does not see a definition for
the symbol - just one or more common symbols - then it will allocate
length
bytes of uninitialized memory.
length
must be an absolute expression. If the
linker sees multiple common symbols with the same name, and they do not all have the same
size, it will allocate space using the largest size.
The .comm
directive takes an optional
third argument. If algn
is specified, it is the desired
alignment of the symbol, specified as a byte boundary (for example, an alignment of 16
means that the least significant 4 bits of the address should be zero). The alignment must
be an absolute expression, and it must be a power of two. If linker allocates uninitialized
memory for the common symbol, it will use the alignment when placing the symbol. If no
alignment is specified, the assembler will set the alignment to the largest power of two
less than or equal to the size of the symbol, up to a maximum of 1.