1. 程式人生 > 實用技巧 >C語言學習筆記之 記憶體管理

C語言學習筆記之 記憶體管理

記憶體管理

記憶體分割槽

普通區域性變數

定義

// 區域性變數
// 在{}裡面定義的不加任何修飾的變數 就是區域性變數
// 作用範圍:離它最近的{}之間
// 生命週期:離它最近的{}結束,區域性變數就釋放
// 儲存空間:棧區
// 注意事項:
    // 區域性變數 不初始化 內容隨機
    // 不同範圍區域性變數同名 就近原則

// 例
#include <stdio.h>

void test()
{
    int num;
    printf("%d\n",num); // 區域性變數,作用域:test函式
}
int main()
{
    test();

    return 0;
}

// 執行結果:
4200363

普通全域性變數

// 全域性變數
// 定義:在函式外定義的變數 就是普通全域性變數
// 作用範圍:當前原始檔和其他原始檔(加extern修飾)
// 生命週期:整個程序
// 儲存空間:全域性區
// 注意事項:
    // 普通全域性變數不初始化 內容為0
    // 普通全域性變數和普通區域性變數同名 就近原則

// 例
#include <stdio.h>

int num; // 普通全域性變數

int main()
{
    printf("%d",num);

    return 0;
}

// 執行結果
0

靜態區域性變數(static修飾)

// 靜態區域性變數
// 在{}裡面定義的 用static修飾 的變數 就是靜態區域性變數
// 作用範圍:離它最近的{}之間
// 生命週期:整個程序
// 儲存空間:全域性區
// 注意事項:
    // 靜態區域性變數不初始化 內容為0
    // 靜態區域性變數多次初始化 只有第一次有效

// 例
#include <stdio.h>

int test()
{
    static int num = 10; // 靜態區域性變數
    ++num;
    printf("%d\n",num);
}

int main()
{
    test();
    test();
    test();

    return 0;
}

// 執行結果
11
12
13

靜態全域性變數

// 靜態全域性變數
// 定義:在函式外定義的 被static修飾 的變數 就是普通全域性變數
// 作用範圍:只在當前原始檔有效
// 生命週期:整個程序
// 儲存空間:全域性區
// 注意事項:
    // 普通全域性變數不初始化 內容為0

靜態函式與普通函式的區別

// 普通函式
int test1(){;}

// 靜態函式
static int test2(){;}

// 普通函式:當前原始檔和其他原始檔(加extern修飾)都可以使用
// 靜態函式:只可以在當前原始檔使用

記憶體分割槽詳解