溫馨提示×

如何理解c++中static關(guān)鍵字的內(nèi)存分配機(jī)制

c++
小樊
83
2024-08-16 11:46:42
欄目: 編程語言

在C++中,static關(guān)鍵字可以用于標(biāo)記變量或函數(shù),它具有以下幾種內(nèi)存分配機(jī)制:

  1. 靜態(tài)局部變量:在函數(shù)內(nèi)部聲明的靜態(tài)局部變量在程序運(yùn)行時(shí)只會(huì)被分配一次內(nèi)存空間,不會(huì)隨著函數(shù)的調(diào)用而重復(fù)分配和銷毀。靜態(tài)局部變量的生命周期是整個(gè)程序運(yùn)行期間,可以在函數(shù)外部訪問,但作用域僅限于聲明它的函數(shù)內(nèi)部。
void foo() {
    static int count = 0;
    count++;
    cout << "count: " << count << endl;
}

int main() {
    foo();  // count: 1
    foo();  // count: 2
    return 0;
}
  1. 靜態(tài)全局變量:在全局范圍內(nèi)聲明的靜態(tài)全局變量與普通全局變量具有相同的生命周期,但作用域僅限于當(dāng)前文件。靜態(tài)全局變量的內(nèi)存空間在程序啟動(dòng)時(shí)被分配,直到程序結(jié)束才被銷毀。
static int globalVar = 10;

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

int main() {
    foo();  // globalVar: 10
    return 0;
}
  1. 靜態(tài)成員變量:在類中聲明的靜態(tài)成員變量是屬于整個(gè)類的,而不是屬于類的每個(gè)對象,因此所有類對象共享同一個(gè)靜態(tài)成員變量。靜態(tài)成員變量的內(nèi)存空間在程序啟動(dòng)時(shí)被分配,直到程序結(jié)束才被銷毀。
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;
}

總結(jié)來說,static關(guān)鍵字可以用于實(shí)現(xiàn)在程序運(yùn)行期間只分配一次內(nèi)存空間的變量或函數(shù),并且具有不同的作用域和生命周期規(guī)則,可以提高程序的效率和靈活性。

0