當前位置:首頁 » 存儲配置 » 靜態存儲方式

靜態存儲方式

發布時間: 2022-11-30 03:53:08

A. 靜態存儲分配和動態存儲分配之間有什麼不同 編譯原理

動態存儲方式
所謂動態存儲方式是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,
使用完畢立即釋放。
典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,
調用函數完畢立即釋放。如果一個函數被多次調用,則反復地分配、
釋放形參變數的存儲單元。
靜態存儲方式
所謂靜態存儲方式是指在程序編譯期間分配固定的存儲空間的方式。該存儲方式通常是在變數定義時就分定存儲單元並一直保持不變,
直至整個程序結束。全局變數,靜態變數等就屬於此類存儲方式。
總結
從以上分析可知,
靜態存儲變數是一直存在的,
而動態存儲變數則時而存在時而消失。我們又把這種由於變數存儲方式不同而產生的特性稱變數的生存期。
生存期表示了變數存在的時間。
生存期和作用域是從時間和空間這兩個不同的角度來描述變數的特性,這兩者既有聯系,又有區別。
一個變數究竟屬於哪一種存儲方式,
並不能僅從其作用域來判斷,還應有明確的存儲類型說明。

B. 靜態是什麼意思

物理學術用語

.『靜態』一詞可以理解為停止不動,不動的狀態下就稱為靜態。從物理的角度講就是靜止狀態,一個不動的狀態。

計算機用語

1.靜態變數:

. 靜態變數的類型關鍵字是static。 靜態變數當然是屬於靜態存儲方式,但是屬於靜態存儲方式的量不一定就是靜態變數, 例如外部變數雖屬於靜態存儲方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全局變數。 對於自動變數,它屬於動態存儲方式。 但是也可以用static定義它為靜態自動變數,或稱靜態局部變數,從而成為靜態存儲方式。 由此看來,一個變數可由static進行再說明,並改變其原有的存儲方式。

. . 它具有以下特點:

  1. 靜態局部變數在函數內定義,但不像自動變數那樣,當調用時就存在,退出函數時就消失。靜態局部變數始終存在著,也就是說它的生存期為整個源程序。

  2. 靜態局部變數的生存期雖然為整個源程序,但是其作用域仍與自動變數相同,即只能在定義該變數的函數內使用該變數。退出該函數後, 盡管該變數還繼續存在,但不能使用它。

  3. 允許對構造類靜態局部量賦初值。若未賦以初值,則由系統自動賦值。數值型變數自動賦初值0,字元型變數賦空字元。

  4. 對基本類型的靜態局部變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。 根據靜態局部變數的特點, 可以看出它是一種生存期為整個源文件的量。雖然離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用後留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變數的值時,可考慮採用靜態局部變數。雖然用全局變數也可以達到上述目的,但全局變數有時會造成意外的副作用,因此仍以採用局部靜態變數為宜。

  5. 來點簡單直白的例子吧(區別靜態局部變數和動態局部變數):【C語言代碼】

【圖:編輯代碼】

C. 靜態存儲和動態存儲的區別

1. 靜態內存

靜態內存是指在程序開始運行時由編譯器分配的內存,它的分配是在程序開始編譯時完成的,不佔用CPU資源。

程序中的各種變數,在編譯時系統已經為其分配了所需的內存空間,當該變數在作用域內使用完畢時,系統會

自動釋放所佔用的內存空間。

變數的分配與釋放,都無須程序員自行考慮。

基本類型,數組

2. 動態內存

用戶無法確定空間大小,或者空間太大,棧上無法分配時,會採用動態內存分配。

  • 處理器不工作,電腦什麼都做不了。

    處理器的工作就是處理指令(多條指令就構成一個程序)。

    處理器從內存中取指令集(程序)。

    問題是如果斷電的話,內存中的指令就會丟失。因而內存歸類為「易失性」介質。

    所以我們要把程序、數據存儲在不易失性的介質中,比如硬碟和光碟。

D. 靜態存儲方式、動態存儲方式與C的存儲類別的區別

c的存儲類別就包括靜態存儲方式、動態存儲方式。 靜態有文件作用域的。定義全局變數。還可以通過static關鍵字進行申明為靜態存儲類。動態就是局部變數,也可以用關鍵字auto進行申明動態存儲方式

E. C語言動態和靜態存儲類別的區別

SRAM的特點是工作速度快,只要電源不撤除,寫入SRAM的信息就不會消失,不需要刷新電路,同時在讀出時不破壞原來存放的信息,一經寫入可多次讀出,但集成度較低,功耗較大。SRAM一般用來作為計算機中的高速緩沖存儲器(Cache)。 DRAM是動態隨機存儲器(Dynamic Random Access Memory),它是利用場效應管的柵極對其襯底間的分布電容來保存信息,以存儲電荷的多少,即電容端電壓的高低來表示「1」和「0」。DRAM每個存儲單元所需的場效應管較少,常見的有4管,3管和單管型DRAM。因此它的集成度較高,功耗也較低,但缺點是保存在DRAM中的信息__場效應管柵極分布電容里的信息隨著電容器的漏電而會逐漸消失,一般信息保存時間為2ms左右。為了保存DRAM中的信息,必須每隔1~2ms對其刷新一次。因此,採用 DRAM的計算機必須配置動態刷新電路,防止信息丟失。DRAM一般用作計算機中的主存儲器。

F. 程序的局部變數 全局變數 動態申請數據分別存儲在什麼地方

程序的局部變數全局變數動態申請數據分別存儲在棧里。

普通局部變數在堆棧空間上分配,當局部變數的函數被多次調用時,局部變數每次在堆棧上的位置都不相同。還可以在堆上動態分配局部變數(malloc),但是要記住在耗盡堆空間後釋放zd。

內存分配上的棧空間時要注意內存的,不能分配太多的內存。如果堆棧中的空間小於請求的空間大小,則系統將顯示堆棧溢出並給出相應的異常信息。但堆不同,堆可分配空間很大。

(6)靜態存儲方式擴展閱讀:

注意事項:

對局部變數進行分類

1.位置:編譯器將靜態局部變數放在全局存儲區域中。數據,因此盡管它是本地的,但它存在於程序的整個生命周期中(它在定義時產生,並隨著程序的結束而結束)。

2.訪問許可權:靜態局部變數只能由其作用域內的變數或函數訪問。也就是說,盡管它將存在於程序的整個生命周期中,但是其他函數和源文件不能訪問它,因為它是靜態的。

3.值:如果用戶沒有初始化靜態局部變數,編譯器會自動將其賦值為0,每次調用靜態局部變數時都會使用最後一次調用後的值。

G. C語言動態和靜態存儲類別的區別

主要區別在於存儲區域和作用時間。
C語言的數據區分為靜態存儲區與動態存儲區。
靜態存儲是指在程序運行期間給變數分配固定存儲空間的方式。如全局變數存放在靜態存儲區中,程序運行時分配空間,程序運行完釋放。
動態存儲是指在程序運行時根據實際需要動態分配存儲空間的方式。如形式參數存放在動態存儲區中,在函數調用時分配空間,調用完成釋放。

H. 變數的靜態存儲與動態存儲

首先,靜態存儲與動態存儲都是變數在內存中的存儲方式。

C語言中變數分為局部變數(auto)、寄存器變數(register)、全局變數(extern)、靜態變數(static)。局部變數和寄存器變數在內存中以動態存儲的方式存儲,外部變數和靜態變數在內存中以靜態存儲的方式存儲。(筆者註:C語言不存在真正意義上的「全局變數」。被習慣性誤稱為「全局變數」的,一般是文件作用域對象。參考: 全局變數-維基網路 )

靜態存儲的變數存儲在內存的靜態區,在整個程序的生命周期內不被釋放。動態存儲的變數在程序執行的過程中才分配存儲位置,使用完成後便被釋放。

靜態存儲的變數如果在聲明後沒有被初始化,則系統會根據數據類型自動將其初始化為「0」或『\0』。動態存儲的變數如果在聲明後沒有被初始化,那麼它的值是不確定的。

I. C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍

在C語言中,對變數的存儲類型說明有以下四種:

1、auto 自動變數

2、register 寄存器變數

3、extern 外部變數

4、static 靜態變數

所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。

變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。

1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。

2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。

如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。

(9)靜態存儲方式擴展閱讀:

變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。

一、從作用域看:

1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。

2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。

3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。

4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。

二、從分配空間看:

全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。

全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。

而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。

1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。

2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。

參考資料來源:網路-變數-存儲類型

J. 靜態變數有何特點如何存取靜態變數

靜態變數的類型說明符是static。靜態變數當然是屬於靜態存儲方式,但是屬於靜態存儲方式的量不一定就是靜態變數,例如外部變數雖屬於靜態存儲方式,但不一定是靜態變數,必須由static加以定義後才能成為靜態外部變數,或稱靜態全局變數。

對於自動變數,它屬於動態存儲方式。但是也可以用static定義它為靜態自動變數,或稱靜態局部變數,從而成為靜態存儲方式。由此看來,一個變數可由static進行再說明,並改變其原有的存儲方式。

常量使用

靜態變數也可以用於存儲常數。具體來說,靜態變數(全局變數及匯編語言里定義的符號亦同)可用const,constant或final(根據語言決定)等關鍵字標識,這時其值就會在編譯時設定,並且無法在運行時改變。

編譯器通常將靜態常量與文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區;而如若有需要,有些編譯器還可選擇為其開辟專用區;為防止常數變數被錯誤的指針寫入覆蓋,亦可在這塊區域啟用內存保護機制。

以上內容參考:網路-靜態變數

熱點內容
怎麼在伺服器執行jmeter腳本 發布:2024-04-25 07:35:25 瀏覽:396
域名訪問https 發布:2024-04-25 07:16:56 瀏覽:414
javaie亂碼 發布:2024-04-25 07:07:15 瀏覽:602
php開發微信支付 發布:2024-04-25 06:57:38 瀏覽:317
上傳視頻最快 發布:2024-04-25 06:42:59 瀏覽:14
允許更新預編譯站點 發布:2024-04-25 06:32:53 瀏覽:679
如何獲取已經連上的網路密碼 發布:2024-04-25 06:27:48 瀏覽:466
python打開界面 發布:2024-04-25 06:27:44 瀏覽:667
java數組重復 發布:2024-04-25 06:27:40 瀏覽:827
同價位的安卓和蘋果哪個好 發布:2024-04-25 06:27:38 瀏覽:359