温馨提示×

如何理解c++中static关键字的内存分配机制

c++
小樊
83
2024-08-16 11:46:42
栏目: 编程语言

在C++中,static关键字可以用于标记变量或函数,它具有以下几种内存分配机制:

  1. 静态局部变量:在函数内部声明的静态局部变量在程序运行时只会被分配一次内存空间,不会随着函数的调用而重复分配和销毁。静态局部变量的生命周期是整个程序运行期间,可以在函数外部访问,但作用域仅限于声明它的函数内部。
void foo() {
    static int count = 0;
    count++;
    cout << "count: " << count << endl;
}

int main() {
    foo();  // count: 1
    foo();  // count: 2
    return 0;
}
  1. 静态全局变量:在全局范围内声明的静态全局变量与普通全局变量具有相同的生命周期,但作用域仅限于当前文件。静态全局变量的内存空间在程序启动时被分配,直到程序结束才被销毁。
static int globalVar = 10;

void foo() {
    cout << "globalVar: " << globalVar << endl;
}

int main() {
    foo();  // globalVar: 10
    return 0;
}
  1. 静态成员变量:在类中声明的静态成员变量是属于整个类的,而不是属于类的每个对象,因此所有类对象共享同一个静态成员变量。静态成员变量的内存空间在程序启动时被分配,直到程序结束才被销毁。
class MyClass {
public:
    static int count;
};

int MyClass::count = 0;

int main() {
    MyClass obj1;
    MyClass obj2;
    
    cout << "obj1 count: " << obj1.count << endl;  // obj1 count: 0
    cout << "obj2 count: " << obj2.count << endl;  // obj2 count: 0
    
    MyClass::count = 10;
    
    cout << "obj1 count: " << obj1.count << endl;  // obj1 count: 10
    cout << "obj2 count: " << obj2.count << endl;  // obj2 count: 10
    
    return 0;
}

总结来说,static关键字可以用于实现在程序运行期间只分配一次内存空间的变量或函数,并且具有不同的作用域和生命周期规则,可以提高程序的效率和灵活性。

0