遠(yuǎn)程學(xué)習(xí)和教育的概念。在線教程和視頻課程,研究和畢業(yè),科學(xué)研討會(huì),數(shù)字網(wǎng)絡(luò)學(xué)習(xí),測(cè)試和文學(xué)
內(nèi)存用于存儲(chǔ)程序中的數(shù)據(jù),由存儲(chǔ)期、作用域和鏈接表征。存儲(chǔ)期可以是靜態(tài)的、自動(dòng)的或動(dòng)態(tài)分配的。如果是靜態(tài)存儲(chǔ)期,在程序開(kāi)始執(zhí)行時(shí)分配內(nèi)存,并在程序運(yùn)行時(shí)都存在。如果是自動(dòng)存儲(chǔ)期,在程序進(jìn)入變量定義所在塊時(shí)分配變量的內(nèi)存,在程序離開(kāi)塊時(shí)釋放內(nèi)存。
如果是動(dòng)態(tài)分配存儲(chǔ)期,在調(diào)用malloc()(或相關(guān)函數(shù))時(shí)分配內(nèi)存,在調(diào)用free()函數(shù)時(shí)釋放內(nèi)存。作用域決定程序的哪些部分可以訪問(wèn)某數(shù)據(jù)。定義在所有函數(shù)之外的變量具有文件作用域,對(duì)位于該變量聲明之后的所有函數(shù)可見(jiàn)。
定義在塊或作為函數(shù)形參內(nèi)的變量具有塊作用域,只對(duì)該塊以及它包含的嵌套塊可見(jiàn)。鏈接描述定義在程序某翻譯單元中的變量可被鏈接的程度。具有塊作用域的變量是局部變量,無(wú)鏈接。具有文件作用域的變量可以是內(nèi)部鏈接或外部鏈接。內(nèi)部鏈接意味著只有其定義所在的文件才能使用該變量。外部鏈接意味著其他文件使用也可以使用該變量。下面是C的5種存儲(chǔ)類(lèi)別(不包括線程的概念)。
下面是C的5種存儲(chǔ)類(lèi)別(不包括線程的概念)。
- 自動(dòng):在塊中不帶存儲(chǔ)類(lèi)別說(shuō)明符或帶auto存儲(chǔ)類(lèi)別說(shuō)明符聲明的變量(或作為函數(shù)頭中的形參)屬于自動(dòng)存儲(chǔ)類(lèi)別,具有自動(dòng)存儲(chǔ)期、塊作用域、無(wú)鏈接。如果未初始化自動(dòng)變量,它的值是未定義的。
- 寄存器——在塊中帶register存儲(chǔ)類(lèi)別說(shuō)明符聲明的變量(或作為函數(shù)頭中的形參)屬于寄存器存儲(chǔ)類(lèi)別,具有自動(dòng)存儲(chǔ)期、塊作用域、無(wú)鏈接,且無(wú)法獲取其地址。把一個(gè)變量聲明為寄存器變量即請(qǐng)求編譯器將其存儲(chǔ)到訪問(wèn)速度最快的區(qū)域。如果未初始化寄存器變量,它的值是未定義的。
- 靜態(tài)、無(wú)鏈接——在塊中帶static存儲(chǔ)類(lèi)別說(shuō)明符聲明的變量屬于“靜態(tài)、無(wú)鏈接”存儲(chǔ)類(lèi)別,具有靜態(tài)存儲(chǔ)期、塊作用域、無(wú)鏈接。只在編譯時(shí)被初始化一次。如果未顯式初始化,它的字節(jié)都被設(shè)置為0。
- 靜態(tài)、外部鏈接——在所有函數(shù)外部且沒(méi)有使用static存儲(chǔ)類(lèi)別說(shuō)明符聲明的變量屬于“靜態(tài)、外部鏈接”存儲(chǔ)類(lèi)別,具有靜態(tài)存儲(chǔ)期、文件作用域、外部鏈接。只能在編譯器被初始化一次。如果未顯式初始化,它的字節(jié)都被設(shè)置為0。
- 靜態(tài)、內(nèi)部鏈接——在所有函數(shù)外部且使用了static存儲(chǔ)類(lèi)別說(shuō)明符聲明的變量屬于“靜態(tài)、內(nèi)部鏈接”存儲(chǔ)類(lèi)別,具有靜態(tài)存儲(chǔ)期、文件作用域、內(nèi)部鏈接。只能在編譯器被初始化一次。如果未顯式初始化,它的字節(jié)都被設(shè)置為0。
動(dòng)態(tài)分配的內(nèi)存由malloc()(或相關(guān))函數(shù)分配,該函數(shù)返回一個(gè)指向指定字節(jié)數(shù)內(nèi)存塊的指針。這塊內(nèi)存被free()函數(shù)釋放后便可重復(fù)使用,free()函數(shù)以該內(nèi)存塊的地址作為參數(shù)。
類(lèi)型限定符const、volatile、restrict和_Atomic。const限定符限定數(shù)據(jù)在程序運(yùn)行時(shí)不能改變。對(duì)指針使用const時(shí),可限定指針本身不能改變或指針指向的數(shù)據(jù)不能改變,這取決于const在指針聲明中的位置。volatile限定符表明,限定的數(shù)據(jù)除了被當(dāng)前程序修改外還可以被其他進(jìn)程修改。該限定符的目的是警告編譯器不要進(jìn)行假定的優(yōu)化。restrict限定符也是為了方便編譯器設(shè)置優(yōu)化方案。restrict限定的指針是訪問(wèn)它所指向數(shù)據(jù)的唯一途徑。