Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Biến static được lưu trữ ở đâu trong C/C++?

Biến static là biến tồn tại trong bộ nhớ suốt vòng đời chương trình (lifetime = toàn bộ quá trình chạy). Điều này khác với biến tự động (automatic/local) chỉ tồn tại khi hàm đang chạy và bị hủy khi hàm kết thúc.

Biến static được lưu trữ trong data segment (đoạn dữ liệu) của bộ nhớ ảo của tiến trình.

  • Initialized data segment: Chứa biến static được khởi tạo giá trị khác 0.
  • Uninitialized data segment (BSS segment): Chứa biến static không khởi tạo hoặc khởi tạo bằng 0.

Ví dụ

static int x = 5; // Lưu trong initialized data segment
static int y;     // Lưu trong BSS segment (mặc định = 0)

Chương trình minh họa biến static trong C:

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ả

5
6
7
8
9
10

Giải thích: Trong func(), biến static i khởi tạo = 4 (lưu trong initialized data segment). Mỗi lần gọi, i tăng 1 và giữ giá trị vì nó không bị hủy giữa các lần gọi hàm.