溫馨提示×

如何理解c++中static關鍵字的內存分配機制

c++
小樊
128
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女