C变量与符号对照

不同的C语言变量声明对应着ELF符号表中的不同表现。

全局变量(非static):如 int g_var = 10;(初始化)或 int g_var;(未初始化)。它们是全局符号,初始化的是强符号,未初始化的是弱符号。

静态全局变量(static):如 static int g_var = 10;。它们是本地符号(Local),仅当前文件可见,但仍需要分配内存,因此存在于符号表中。

静态局部变量:如 void f() { static int s = 1; }。虽然是函数内的变量,但生命周期是全局的,因此也是本地符号。

普通局部变量:如 void f() { int a = 1; }。在运行时分配在栈上,没有固定地址,链接器完全不需要处理,不是符号。

外部引用变量:如 extern int ext_var;。属于外部符号(Undefined),告诉链接器去其他地方找定义。

函数(非static):如 void func() {}。全局符号,强符号。

函数(static):如 static void func() {}。本地符号,仅当前文件可调用。

链接到