.comm 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
ld 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
ld 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.
When using ELF, the
.comm directive takes an optional third argument.
This 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
ld allocates uninitialized memory
for the common symbol, it will use the alignment when placing the symbol. If
no alignment is specified, as 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 16.
The syntax for
.comm differs slightly on the HPPA. The syntax is
symbol .comm, length; symbol is optional.