想要了解功能本地的静态变量的nm输出

时间:2017-04-05 09:14:04

标签: c++ c gcc

我声明了两个静态变量。一个是全局的,另一个是主要功能的本地。之后我做了nm a.out

输出:

0000000000000000 l     O .data  0000000000000004 gloBAL_a   <<<<< static outside main

0000000000000004 l     O .data  0000000000000004 local_b.2127 <<< static inside main

.2127是什么意思?

1 个答案:

答案 0 :(得分:0)

在文件范围声明变量时,它将具有唯一标识符gloBAL_a。但是当你在本地范围内声明局部静态变量时,它可以使用与在别处分配的另一个变量相同的名称。

编译器因此使用名为&#34; name mangling&#34;的东西来确保内部使用的变量名永远是唯一的。也就是说,它在变量名后添加一个点和一个序列号。

您可以尝试将两个变量命名为相同的名称,并且您应该看到两种变量的名称相同。