標籤:備份 size 儲存類別 內嵌函式 標識符 開始 串連 read 全域
1、範圍
塊範圍:用{}闊起來的,從聲明開始到“}” 結束
函數範圍:goto(標識符) 的範圍為整個函數。
函數原型範圍:函式宣告開始,函式宣告結束而結束
檔案範圍:整個檔案或者程式
2、連結
無連結:即只在其範圍內可見
內連結:即在從聲明到檔案結束都是可見的
外連結 :多個檔案或者整個程式都可見
3、儲存期
靜態儲存期:在整個程式都是佔有記憶體的
線程儲存期:thread_local,其聲明後會給每個線程分配一個單獨的私人備份
自動儲存期:局部變數通常都自動為auto 儲存期
動態儲存裝置期:就是用new 或者malloc分配的記憶體,如果不主動釋放,在整個程式都佔有記憶體
4、總結
儲存類別 儲存期 範圍 連結屬性 表示
自動 自動 塊 無連結 塊內聲明變數
寄存器 自動 塊 無連結 塊內使用register修飾
靜態外連結 靜態 檔案 外連結 所有函數外
靜態內連結 靜態 檔案 內連結 所有函數外,用static修飾
靜態無連結 靜態 塊 無連結 塊內,使用static修飾
線程儲存 自動 線程 無連結 thread_local修飾
4、函數的儲存期
外部函數:預設都是外部函數
靜態函數:使用static 修飾,內串連
內嵌函式:inline
5、注意
- auto 在c中表示自動儲存期
- 但是auto在c++11 中表示自動推斷類型
- register 聲明後,並不一定會存到寄存器中,他只是一種請求。及時不存在寄存器中也不能對其取地址。同時可以存為register的類型可不多,
因為有些類型太大了,寄存器存不下。
- 靜態變數或者全域常量,都儲存在靜態區,在程式載入時已經執行賦值了 ,他們如果不被初始化,將會被初始化為0,存在bss段中。
6、申請記憶體
malloc:malloc(sizeof(xxx))
calloc:calloc(num,sizeof(xx))
realloc: realloc(p,size)
7、限定符
volatile
const:
restrict:
c語言 範圍、儲存期、連結屬性匯總