1. 限制作用域
static关键字可以用来限制函数或变量的作用域,使其只能在当前文件内被访问。这有助于避免命名冲突,并提高代码的模块化和可维护性。
只能在当前文件里访问,或调用当前文件里有的函数。
// 文件 A.h
static int globalVar = 10;
void someFunction();
// 文件 B.cpp
#include "A.h"
void someFunction() {
// 可以访问 globalVar,因为它在同一个翻译单元中
globalVar = 20;
}
// 文件 C.cpp
#include "A.h"
void anotherFunction() {
// 错误:无法访问 globalVar,因为它被限制在 A.h 文件的作用域内
globalVar = 30; // 编译器会报错
}
2. 避免符号导出
在内核模块中,如果一个函数或变量被声明为static,它不会被导出到内核的符号表中。这意味着其他模块或内核代码无法直接访问它,从而提高了模块的安全性和封装性。内核符号表(Kernel Symbol Table)是操作系统内核中的一个重要组成部分,它记录了内核中所有导出的函数和变量的符号信息。
3. 变相提升性能
对于变量,static关键字可以用来声明静态变量,这种变量在程序的整个生命周期内都占用内存。虽然这不会直接节省内存,但它可以避免在每次函数调用时分配和释放栈空间,从而提高性能。
4. 初始化静态数据
static关键字可以用来初始化静态数据,这些数据在模块加载时被初始化,并在模块的整个生命周期内保持其值。
static struct my_struct {
int id;
char name[20];
} my_instance = { 1, "Example" }; // 静态初始化