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() {}。本地符号,仅当前文件可调用。
链接到
- 上一个知识点:7.8 强弱符号规则
- 下一个知识点:7.10 重定位过程