首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言儲存類別:自動、靜態與暫存器變數詳解

     編輯:關於C語言

三種儲存類別

類別關鍵字儲存區生命週期作用域預設初值
自動變數auto (預設)堆疊函數執行期間區域不定值 (Debug 0xCC)
靜態變數static資料區程式全程區域/檔案0
暫存器變數registerCPU 暫存器 (建議)函數執行期間區域不定值

自動變數

  • 每次進入函數分配,離開釋放。
  • 每次分配重新初始化。例:函數內 auto int s=0; s++; 多次呼叫輸出皆為 1。

靜態變數

本質

  • 儲存於資料區,與全域變數相同區塊(除錯器位址證實)。
  • 編譯器層面限制作用域:區域靜態變數僅可見於定義函數;檔案靜態變數僅可見於本編譯單元(.obj 符號表重命名,如 ?x@?1??func@@YAXXZ@4HA,編碼函數資訊)。
  • 連結器不導出符號,因此無法跨檔案存取。

生命週期

程式載入時建立(早於 main),程式結束時銷毀(晚於 main)。

用途

實現模組級/函數級私有狀態(資訊隱藏)。

暫存器變數

僅是對編譯器的「建議」,現代編譯器最佳化極佳,手動指定反而可能妨礙最佳化。實務上不建議使用,屬雞肋功能。

總結建議

  • 優先使用自動變數(區域變數)。
  • 需要跨呼叫保持狀態時,用區域 static。
  • 模組內部共享狀態用檔案 static。
  • 極少數極熱路徑可嘗試 register,但通常無效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved