AFAIK,我们可以在不同的函数中有两个同名的静态变量吗?这些是如何由编译器和符号表管理的?他们的身份如何单独管理?
答案 0 :(得分:3)
编译器不会在链接符号表中存储静态变量的名称。就链接器而言,它们只是模块的一部分内存。 (在所有情况下,这可能不是100%真实,但实际上是真的)
静态变量的名称通常包含在调试符号表中。
当您将.c文件提供给编译器时,它会跟上所有已知符号的名称,以便它们可以识别它们在将来的代码中出现时的状态。它还会记住它们,以便它可以提供有用的错误/警告消息,但在生成输出文件时它几乎会忘记它们(除非生成调试符号)。
答案 1 :(得分:1)
它们可能在表格中被破坏,其方式与实现重载函数的方式类似。
如果你想查看表格,请参阅dumpbin /symbols foo.obj
,或者在linux上使用objdump
。
答案 2 :(得分:1)
这取决于编译器,但是一些嵌入式的只是在每个重复名称的末尾添加一个数字。这样每个变量都有一个唯一的名称。