ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
创建通用符号
.common symbol,size in bytes[, alignment]
.common symbol,structure tag[, alignment]
.common 指令用于在通用块中创建通用符号,而不是在一个存储器段中放置变量。
使用通用符号的好处是生成的代码可以删除未使用的变量(如果不删除,则会增加 .bss 段的大小)。(大于 32 字节的未初始化变量通过放置在可以在链接时省略的单独子段中被单独地优化。)
当启用 --common 选项(默认)时,编译器将使用该指令,这会导致未初始化的文件作用域变量作为通用符号发出。除非使用 --common=off 编译器选项,否则默认情况下会对 C/C++ 代码进行这种优化。
通用符号是放置在 ELF 目标文件的符号表中的符号。它们表示未初始化的变量。通用符号不会引用段。(相反,初始化变量需要引用包含初始化数据的段。)通用符号的值是其所需的对齐方式;它没有地址,也没有存储地址。虽然未初始化的通用块的符号可以出现在可执行目标文件中,但通用符号只能出现在可重定位的目标文件中。通用符号优于弱符号。有关通用符号的更多信息,请参阅 System V ABI 规范中有关“符号表”的部分。
链接包含通用符号的目标文件之时,会在未初始化段 (.common) 中为每个通用符号保留空间。创建一个符号来代替通用符号以引用其保留位置。