4種存儲類型
auto:自動變數
auto存儲在內存的堆棧區,屬於臨時性存儲變數,並不長期佔用內存,可以被多次覆蓋。
register:寄存器變數
register與auto一樣屬於自動類別。區別在於register的值保存在CPU的寄存器中。計算機中只有寄存器中的數據才能直接參與運算,而一般變數是放在內存中的,變數參加運算是,需要先把變數從內存中取到寄存器中,然後計算。所以一般把使用最頻繁的變數定義成register變數。register變數只能在函數中定義,並只能是int和char型。
static:靜態變數
static一般存儲在數據區,,這類變數在數據說明時被分配了一定的內存空間,程序運行期間,它占據一個永久的存儲單元,,因此在對出函數後,存儲單元中的值仍舊保留。簡單說,程序運行時static型變數的值可以被語句改變,但當程序運行結束後,其值又變回原來的值。
extern:外部類型
estern變數在數據運行時被分配了一定的內存空間,該空間在整個運行程序中,只要程序存在,自始自終都被該變數使用,即其值始終不變
『貳』 C語言中有哪些存儲類型
c語言中的存儲類型有auto, extern, register, static 這四種,存儲類型說明了該變數要在進程的哪一個段中分配內存空間,可以為變數分配內存存儲空間的有數據區、BBS區、棧區、堆區。
1. auto存儲類型
auto只能用來標識局部變數的存儲類型,對於局部變數,auto是默認的存儲類型,不需要顯示的指定。因此,auto標識的變數存儲在棧區中。
2. extern存儲類型
extern用來聲明在當前文件中引用在當前項目中的其它文件中定義的全局變數。如果全局變數未被初始化,那麼將被存在BBS區中,且在編譯時,自動將其值賦值為0,如果已經被初始化,那麼就被存在數據區中。全局變數,不管是否被初始化,其生命周期都是整個程序運行過程中,為了節省內存空間,在當前文件中使用extern來聲明其它文件中定義的全局變數時,就不會再為其分配內存空間。
3. register存儲類型
聲明為register的變數在由內存調入到CPU寄存器後,則常駐在CPU的寄存器中,因此訪問register變數將在很大程度上提高效率,因為省去了變數由內存調入到寄存器過程中的好幾個指令周期。
4. static存儲類型
被聲明為靜態類型的變數,無論是全局的還是局部的,都存儲在數據區中,其生命周期為整個程序,如果是靜態局部變數,其作用域為一對{}內,如果是靜態全局變數,其作用域為當前文件。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。
『叄』 C語言中有哪些存儲類型
四種變數存儲類型。說明符如下:
auto static extern register
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1. 靜態局部變數
它與局部變數的區別在於: 在函數退出時, 這個變數始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變數一樣。
2. 靜態全程變數
Turbo C將大型程序分成若干獨立模塊文件分別編譯, 然後將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變數通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變數。
『肆』 存儲設備主要有哪幾種
硬碟:
硬碟是用來存儲數據的倉庫。看到「硬碟」這個名字,有的同學可能會問,硬碟外面看起明明是個盒子為什麼叫個「盤」呢?這是因為傳統的機械硬碟(HDD)盒子般的外表下藏著一張(或者幾張)盤子的「心」。我們存在電腦上的數據都在這些盤子里,這些盤子的學名叫「磁碟」。磁碟上方有一個名叫「磁頭」的部件,當電腦從磁碟上存讀數據的時候,「磁頭」就會與「磁碟」摩擦摩擦,魔鬼般的步伐…當然不是真的「摩擦」,它們之間是通過「心靈(電磁)感應」實現交流的。傳統的機械硬碟容量已經從G時代步入了T時代,它的量價比(存儲容量/價格)是最大的(嗯,給日本大姐姐們安家很合適)。
固態硬碟(SSD)是近幾年漸漸被普及的新產品,相比HDD來說,固態硬碟的這個「盤」字就有點名不副實了。SSD用快閃記憶體替代了HDD的「磁碟」來作為存儲介質,直接通過電流來寫入、讀取數據,摒棄了HDD中的機械操作過程,並且SSD的讀和寫可以將一個完整數據拆成多份,在主控的控制下並行操作,這樣就大大提高了讀寫的吞吐量。一般來說固態硬碟的隨機存取速度(讀取大量小文件)比HDD快幾十倍甚至上百倍,持續存取速度(一次讀取一個大文件)也比HDD快一倍以上。不過相對HDD來說,SSD還是硬碟界的高富帥,相同容量的SSD的售價可以買十幾塊同容量的HDD。
U盤、SD卡、MiniSD卡和各種卡:
這幾類產品都是用快閃記憶體作為存儲介質的常用存儲設備,不過相比SSD而言,存儲容量較小(人家身材好嘛),也沒有復雜的主控電路實現數據的並行寫入,所以存取速度上比SSD慢不少。 U盤的英文名是「USB flash disk」,名字中有個「USB」,顧名思義,這種「盤」經常與電腦上的USB介面插來插去,一般用來做數據中轉站。
『伍』 存儲的分類有哪幾種並簡單進行描述
四種變數存儲類型。說明符如下:
auto static extern register
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1. 靜態局部變數
它與局部變數的區別在於: 在函數退出時, 這個變數始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變數一樣。
2. 靜態全程變數
Turbo C將大型程序分成若干獨立模塊文件分別編譯, 然後將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變數通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變數。
『陸』 主要的四種類型內部存儲器晶元是什麼
按照功能劃分,可以分為四種類型,主要是內存晶元、微處理器、標准晶元和復雜的片上系統(SoCs)。按照集成電路的類型來劃分,則可以分為三類,分別是數字晶元、模擬晶元和混合晶元。
從功能上看,半導體存儲晶元將數據和程序存儲在計算機和數據存儲設備上。隨機存取存儲器(RAM)晶元提供臨時的工作空間,而快閃記憶體晶元則可以永久保存信息,除非主動刪除這些信息。只讀存儲器(ROM)和可編程只讀存儲器(PROM)晶元不能修改。而可擦可編程只讀存儲器(EPROM)和電可擦只讀存儲器(EEPROM)晶元可以是可以修改的。
微處理器包括一個或多個中央處理器(CPU)。計算機伺服器、個人電腦(PC)、平板電腦和智能手機可能都有多個CPU。PC和伺服器中的32位和64位微處理器基於x86、POWER和SPARC晶元架構。而移動設備通常使用ARM晶元架構。功能較弱的8位、16位和24位微處理器則主要用在玩具和汽車等產品中。
標准晶元,也稱為商用集成電路,是用於執行重復處理程序的簡單晶元。這些晶元會被批量生產,通常用於條形碼掃描儀等用途簡單的設備。商用IC市場的特點是利潤率較低,主要由亞洲大型半導體製造商主導。
SoC是最受廠商歡迎的一種新型晶元。在SoC中,整個系統所需的所有電子元件都被構建到一個單晶元中。SoC的功能比微控制器晶元更廣泛,後者通常將CPU與RAM、ROM和輸入/輸出(I/O)設備相結合。在智能手機中,SoC還可以集成圖形、相機、音頻和視頻處理功能。通過添加一個管理晶元和一個無線電晶元還可以實現一個三晶元的解決方案。
晶元的另一種分類方式,是按照使用的集成電路進行劃分,目前大多數計算機處理器都使用數字電路。這些電路通常結合晶體管和邏輯門。有時,會添加微控制器。數字電路通常使用基於二進制方案的數字離散信號。使用兩種不同的電壓,每個電壓代表一個不同的邏輯值。
但是這並不代表模擬晶元已經完全被數字晶元取代。電源晶元使用的通常就是模擬晶元。寬頻信號也仍然需要模擬晶元,它們仍然被用作感測器。在模擬晶元中,電壓和電流在電路中指定的點上不斷變化。模擬晶元通常包括晶體管和無源元件,如電感、電容和電阻。模擬晶元更容易產生雜訊或電壓的微小變化,這可能會產生一些誤差。
混合電路半導體是一種典型的數字晶元,同時具有處理模擬電路和數字電路的技術。微控制器可能包括用於連接模擬晶元的模數轉換器(ADC),例如溫度感測器。而數字-模擬轉換器(DAC)可以使微控制器產生模擬電壓,從而通過模擬設備發出聲音。
『柒』 什麼是變數的存儲類型
量有4種存儲類型,分別是auto(自動型)、static(靜態型)、register(寄存器型)和extern(外部型)。在定義或說明一個變數時可以加上存儲類型關鍵字,以限定其存儲類別。
存儲類型決定了系統將在哪一個數據存儲區為變數分配存儲空間。
『捌』 哪位大蝦幫忙梳理一下4種存儲類別(auto,register,extern,static)和局部/全局變數的關系
auto是局部變數,如果你定義一個全局變數為auto存儲類型編譯器就會報錯
resister是寄存器存儲,他的訪問速度快,但單片機中寄存器的數量較少,程序執行過程中一般作為變數的暫存中介,裡面的內容經常會被更改,所以通常是局部變數
extern是外部存儲,一般是在當前文件中聲明,在另外的文件中定義或者使用,一般為全局的
static是靜態存儲,他可以是全局的也可以是局部的,全局變數聲明為static類型時他作用域只在當前文件中,局部變數聲明為static類型時,他的作用域是在當前定義變數的{}內。在C++中static變數一般是整個類的屬性。
『玖』 c語言的內存變數
存儲類別指的是數據在內存中存儲的方法。存儲方法分為靜態存儲和動態存儲兩大類。標准C語言為變數、常量和函數定義了4種存儲類型:extern、auto、static、register。根據變數的存儲類別,可以知道變數的作用域和存儲期。這4種存儲類型可分為兩種生存期限:永久的(在整個程序執行期都存在)和臨時的(暫時保存在堆棧和寄存器中)。extern和static用來標識永久生存期限的「變數和函數」,而anto和register用來標識臨時生存期限的"變數"。只有變數才有臨時生存期限。一個變數和函數只能具有一個存儲類型,也只能有一種生存期限。
內存中供用戶使用的空間有三部分:
程序區:存放程序的可執行代碼;
靜態存儲區:存放靜態變數(全局變數和靜態局部變數);
動態存儲區:存放函數調用時調用函數的現場保護和返回地址、函數形參、自動局部變數;
變數的聲明分為」定義性聲明「(需建立存儲空間,如:int a;)和」引用性聲明「(不需建立存儲空間,如extern a;)。廣義上講,聲明包括定義,一般為敘述方便,把建立存儲空間的聲明稱定義,而不不需建立存儲空間的聲明稱聲明。
auto
函數中的局部變數,如果不用關鍵字static加以聲明,編譯系統對它們是動態地分配存儲空間的。函數的形參和在函數中定義的變數(包括在復合語句中定義的變數)都屬此類。在調用該函數時,系統給形參和函數中定義的變數分配存儲空間,數據存儲在動態存儲區中。在函數調用結束時就自動釋放這些空間。如果是在復合語句中定義的變數,則在變數定義時分配存儲空間,在復合語句結束時自動釋放空間。因此這類局部變數稱為自動變數(auto variable)。自動變數用關鍵字auto作存儲類別的聲明。
對自動變數賦初值,不是在編譯時進行的,而是在函數調用時進行。對自動變數來說,若不賦初值,則它的值是一個不確定的值。
『拾』 C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍
在C語言中,對變數的存儲類型說明有以下四種:
1、auto 自動變數
2、register 寄存器變數
3、extern 外部變數
4、static 靜態變數
所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。
變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。
1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。
2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。
如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。
(10)4種存儲類型擴展閱讀:
變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
二、從分配空間看:
全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。
全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。
而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。
1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
參考資料來源:網路-變數-存儲類型