C/C++ 中的靜態變數儲存在哪裡?


靜態變數是在程式執行期間保留在記憶體中的變數,即它們的生存期是整個程式執行期間。這與自動變數不同,自動變數只在函式執行時保留在記憶體中,並在函式結束後被銷燬。

靜態變數儲存在記憶體的資料段中。資料段是程式虛擬地址空間的一部分。

所有未顯式初始化或初始化為零的靜態變數都儲存在未初始化資料段(也稱為 BSS 段)中。相比之下,已初始化的靜態變數儲存在已初始化資料段中。

示例如下:

static int x = 5;
static int y;

The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.

演示 C 語言中靜態變數的程式如下:

示例

 線上演示

#include<stdio.h>
int func(){
   static int i = 4 ;
   i++;
   return i;
}

int main(){
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());

   return 0;
}

上述程式的輸出如下:

5
6
7
8
9
10

現在讓我們理解上述程式。

在函式 func() 中,i 是一個初始化為 4 的靜態變數。因此它儲存在已初始化資料段中。然後 i 自增並返回其值。顯示此程式碼片段如下:

int func(){
   static int i = 4 ;
   i++;
   return i;
}

在 main() 函式中,func() 函式被呼叫 6 次,並返回 i 的值,該值被打印出來。由於 i 是靜態變數,它在程式執行期間保留在記憶體中,並提供一致的值。顯示此程式碼片段如下:

printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());

更新於:2020年6月26日

10K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告