【读书笔记】程序员的自我修养总结(五)
声明:引用请注明出处http://blog.csdn.net/lg1259156776/
说明:这是程序员的自我修养一书的读书总结,随着阅读的推进,逐步增加内容。
COMMON块
前面提到过强弱符号机制允许同一个符号的定义存在于多个文件中,编译器知道变量数据类型,而链接器则不知道数据类型,即变量类型对链接器是透明的,只知道一个符号的名字,并不知道类型是否一致。当定义多个类型不一致的符号时,链接器该如何处理呢?
一种情况是两个强符号,当然直接链接器报错,不允许强符号多重定义;
二种情况是一个强符号,其余是弱符号。肯定直接只选择强符号,而不管数据类型的空间那个大;
三种情况是多个弱符号,选择数据类型占据内存空间最大的那个定义。
当编译器将一个编译单元编译成目标文件时,如果编译单元包含了弱符号,那么弱符号最终占据空间大小是未知的,因为它不知道其他编译单元中该弱符号占据的空间大小,所以编译器无法为该弱符号在BSS段分配空间,因为所需空间大小未知。但链接器