就是符号和对应空间大小,多重定义的时候,以最大的那块为准

编译器将未初始化的全局变量定义作为弱符号处理,链接最后以最大的为准。如果出现了强符号那就是强符号要大于等于弱符号,否则会报警告

本质是链接器不支持符号类型,如果在 c 里 extern 声明一个外部符号, ld 通过的话,内部会当成声明的类型去使用这块内存的

局部静态变量在编译单元的时候已经在 .bss 段分配空间了(已经知道所有信息了),而未初始化的全局变量在链接完成后得到其大小后才在 .bss 段分配空间

也有效防止了原本想在编译单元之间共享的变量因为忘记加上 extern 导致不易发现的错误