Computer >> Máy Tính >  >> Lập trình >> lập trình C

Các biến tĩnh được lưu trữ ở đâu trong C / C ++?


Biến tĩnh là các biến vẫn còn trong bộ nhớ khi chương trình đang chạy, tức là thời gian tồn tại của chúng là toàn bộ chương trình chạy. Điều này khác với các biến tự động vì chúng chỉ lưu trong bộ nhớ khi hàm của chúng đang chạy và bị hủy khi hàm kết thúc.

Các biến tĩnh được lưu trữ trong phân đoạn dữ liệu của bộ nhớ. Phân đoạn dữ liệu là một phần của không gian địa chỉ ảo của chương trình.

Tất cả các biến tĩnh không có khởi tạo rõ ràng hoặc được khởi tạo bằng 0 đều được lưu trữ trong phân đoạn dữ liệu chưa được khởi tạo (còn được gọi là phân đoạn BSS). So với điều này, các biến tĩnh được khởi tạo được lưu trữ trong phân đoạn dữ liệu đã khởi tạo.

Ví dụ về điều này được đưa ra như sau -

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.

Một chương trình chứng minh các biến tĩnh trong C được đưa ra như sau -

Ví dụ

#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;
}

Kết quả của chương trình trên như sau -

5
6
7
8
9
10

Bây giờ chúng ta hãy hiểu chương trình trên.

Trong hàm func (), i là một biến tĩnh được khởi tạo là 4. Vì vậy, nó được lưu trữ trong đoạn dữ liệu đã khởi tạo. Sau đó, i được tăng dần và giá trị của nó được trả về. Đoạn mã hiển thị điều này như sau -

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

Trong hàm main (), hàm func () được gọi 6 lần và nó trả về giá trị i được in ra. Vì i là một biến tĩnh nên nó vẫn ở trong bộ nhớ khi chương trình đang chạy và nó cung cấp các giá trị nhất quán. Đoạn mã hiển thị điều này như sau -

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