① 變數的靜態存儲與動態存儲
首先,靜態存儲與動態存儲都是變數在內存中的存儲方式。
C語言中變數分為局部變數(auto)、寄存器變數(register)、全局褲如變數(extern)、靜態變數(static)。局部變數和寄存器變數在內存中以動態存儲的方式存儲,外部變數和靜態變數在內存中以靜態存儲的方式存儲。(筆者註:C語言不存在真正意義上的「全局變數」。被習埋純搜慣性誤稱為「全局變數」的,一般是文件作用域對象。參考: 全局變數-維基網路 )
靜態存儲的變數存儲在內存的靜態區,在整個程序的生命周期內不被釋放。動態存儲的變數在程序執行的過程中才分配存儲位置,使用完成後便被釋放。
靜態存儲的變數如果在聲明後沒有被初始化,則系統會根據數據類型自動將其初始化為「0」或『\0』。動態存儲的變數如果在聲明後沒有被初始化,那麼它的值是彎歷不確定的。
② C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍
在C語言中,對變數的存儲類型說明有以下四種:
1、auto 自動變數
2、register 寄存器變數
3、extern 外部變數
4、static 靜態變數
所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。
變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。
1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。
2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。
如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。
(2)全局動態存儲什麼意思擴展閱讀:
變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
二、從分配空間看:
全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。
全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。
而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。
1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
參考資料來源:網路-變數-存儲類型
③ [C語言] 動態存儲區 和 動態分配內存 的區別。萬分感謝!
(1)從變數的生存期分,有動態存儲和靜態存儲兩種,動態存儲即在調用函數時臨時分配單元,靜態存儲則是程序整個運行時間內都存在。動態存儲:形式參數(本函數內有效); auto自動變數(本函數內有效);register寄存器變數(本函數有效)。靜態存儲: 靜態局部變數(本函數內有效);靜態外部變數(本文件中有效)。參考http://..com/question/128146638.html?fr=newQuestion
(2)C語言里malloc函數分配的空間屬於動態存儲區的范疇。正如上面提到的auto自動變數,通過malloc來分配空間的都是自動變數。在C++里明確分開了棧、和自由存儲區。像自由變數里的局部變數(全局變數分配在「全局/靜態存儲區」)和函數都是存儲在棧區。而通過malloc分配的空間在自由存儲區。C語言沒有分那麼細,但是在動態存儲區內還是分棧和堆的,也就是,由malloc分配的空間在堆區;非malloc分配的局部變數,函數等在棧區;全局變數與靜態變數在靜態存儲區。
(3)區別在(2)里說的很清楚了,如果還有哪裡不是很明白可以看一下參考資料。
最後,祝您成功!
④ C語言動態和靜態存儲類別的區別
主要區別在於存儲區域和作用時間。
C語言的數據區分為靜態存儲區與動態存儲區。
靜態存儲是指在程序運行期間給變數分配固定存儲空間的方式。如全局變數存放在靜態存儲區中,程序運行時分配空間,程序運行完釋放。
動態存儲是指在程序運行時根據實際需要動態分配存儲空間的方式。如形式參數存放在動態存儲區中,在函數調用時分配空間,調用完成釋放。
⑤ 靜態存儲分配和動態存儲分配之間有什麼不同 編譯原理
動態存儲方式
所謂動態存儲方式是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,
使用完畢立即釋放。
典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,
調用函數完畢立即釋放。如果一個函數被多次調用,則反復地分配、
釋放形參變數的存儲單元。
靜態存儲方式
所謂靜態存儲方式是指在程序編譯期間分配固定的存儲空間的方式。該存儲方式通常是在變數定義時就分定存儲單元並一直保持不變,
直至整個程序結束。全局變數,靜態變數等就屬於此類存儲方式。
總結
從以上分析可知,
靜態存儲變數是一直存在的,
而動態存儲變數則時而存在時而消失。我們又把這種由於變數存儲方式不同而產生的特性稱變數的生存期。
生存期表示了變數存在的時間。
生存期和作用域是從時間和空間這兩個不同的角度來描述變數的特性,這兩者既有聯系,又有區別。
一個變數究竟屬於哪一種存儲方式,
並不能僅從其作用域來判斷,還應有明確的存儲類型說明。
⑥ 在C語言中,什麼是動態存儲,什麼是靜態存儲
動態存儲是auto關鍵字,例如我們定義的int
a;
默認就是動態存儲,具體應該是
auto
int
a;一般是用於函數參數,局部變數,超出作用域范圍會失效,變數產生在動態存儲區
靜態存儲時static關鍵字,例如,我們定義一個
static
int
a;
就是存儲在靜態存儲區,相當於一個全局變數
一樓的理解出現了問題
⑦ 什麼是靜態存儲區和動態存儲區啊
1. 全局變數和靜態數據放在靜態存儲區,生命周期為從申請到程序退出。因此局部變數若定義為static,則存儲在靜態存儲區,否則存儲在函數的棧內,生命周期為本函數內。
2 動態存儲放自動變數和局部變數
⑧ 什麼是動態存儲什麼時候用
存儲器分為內存和外存
內存又分為靜態存儲和動態存儲
動態存儲就是指內存條(這只是我的個人意見)
當你的電腦運行時,硬碟中的信息就會傳到內存條中,然後再傳給CPU處理。也就是說當你的電腦打開後,你的動態存儲器已經開始在用了。
舉個例子:
硬碟就相當於冰箱,內存條就相當於切菜用的案板,CPU就相當於菜刀。要完成某向程序就如同:把材料從冰箱里拿出來,再放到案板上,用刀完成。你所說的那個動態存儲就是案板,是臨時存放你當前打開的程序的。
⑨ 靜態存儲器與動態存儲器的定義是什麼
靜態存儲器是指依靠雙穩態觸發器的兩個穩定狀態保存信息的存儲器。雙穩態電路是有源器件,需要電源才能工作,只要電源正常,就能長期穩定的保存信息,所以稱為靜態存儲器。如果斷電,信息將會丟失,屬於揮發性存儲器,或稱易失性。
動態存儲器是指在指定功能或應用軟體之間共享的存儲器。如果一個或兩個應用軟體佔用了所有存儲器空間,此時將無法為其他應用軟體分配存儲器空間。需要由存儲器控制電路按一定周期對存儲器刷新,才能維系數據保存。
(9)全局動態存儲什麼意思擴展閱讀:
動態存儲器的工作原理
動態RAM是由許多基本存儲元按照行和列地址引腳復用來組成的。在3管動態RAM電路中,讀選擇線和寫選擇線是分開的,讀數據線和寫數據線也是分開的。
寫操作時,寫選擇線為"1",Q1導通,要寫入的數據通過Q1送到Q2的柵極,並通過柵極電容在一定時間內保持信息。
讀操作時,先通過公用的預充電管Q4使讀數據線上的分布電容CD充電,當讀選擇線為高電平有效時,Q3處於可導通的狀態。若原來存有"1",則Q2導通,讀數據線的分布電容CD通過Q3、Q2放電。此時讀得的信息為"0",正好和原存信息相反。
可見,對這樣的存儲電路,讀得的信息和原來存入的信息正好相反,所以要通過讀出放大器進行反向再送往數據匯流排。