c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...
C語言中靜態(tài)變量是什么意思,有什么作用,static在數據類型前面表示什么
最近剛看了C存儲類的章節(jié)。所以來說說。
C語言為變量提供了⑤種不同的存儲模型,或者說是存儲類。
①個變量可以用存儲時期描述,也可以用作用域描述,也可以用它的鏈接描述。c 類 static 函數
存儲時期就是變量在內存中的保留時間。比如說全局變量①直都在,而①個代碼塊里的局部變量當這個代碼塊執(zhí)行完以后,它就不在了。
存儲時期分為,自動,和靜態(tài)。
變量的作用域和鏈接①起可以說明,程序的那些部分可以通過變量名來使用該變量。
變量的作用域分兩類,①個是代碼塊作用域,①個是文件作用域。
(還有個叫函數作用域的,和goto語句有關,說的是goto語句的標簽堆該函數的任何地方的代碼都是可見的,無論出現在哪①個代碼塊)
鏈接分③種,外部鏈接,內部鏈接,和空鏈接。
函數內的局部變量是空鏈接。所有函數以外定義的變量有內部鏈接和外部鏈接之分。
內部是說,該變量可以在這個文件內使用。
外部是說,可以在多個文件內使用,就是你定義聲明①次變量,在另外①個相關文件內不用再定義,可以直接引用。
不同的存儲類就是變量的作用域、鏈接以及存儲時期的不同組合。
這樣的組合的結果是有以下⑤種存儲類。
① · 自動變量
② · 寄存器變量
③ · 空鏈接的靜態(tài)變量
④ · 具有外部鏈接的靜態(tài)變量
⑤ · 具有內部鏈接的靜態(tài)變量
所以說,要明白靜態(tài)變量是什么先要明白,靜態(tài)這個概念是針對存儲時期來說,舉個例子,①個定義的函數內的局部變量,如果你不聲明它的存儲類,那么它默認是自動變量,自動變量的特點就是你調用這個函數的時候,這個變量存在,調用結束以后,這個變量就不存在了。而你如果把這個函數里的①個變量存儲時期定義為靜態(tài)的,那么當這個函數結束以后,這個變量還在。只是說作用域限于這個函數。這種變量叫做空鏈接的靜態(tài)變量,又叫代碼塊作用域的靜態(tài)變量。
還有如果在所有函數值外定義的變量也稱之為靜態(tài)變量。
下面來說關鍵字static和靜態(tài)變量的關系。c 類 static 函數
①個在有函數以外聲明的變量,它是具有文件作用域的變量,即從它定義的位置到文件結束時都是可以用這個變量的名來引用它的。(在某個函數內,如果沒有相同名稱的變量,引用的就是這個變量),而對于文件作用域變量,它必然是①個靜態(tài)變量,所以對于文件作用域的變量,關鍵字static的作用不是表明存儲時期,而是鏈接類型,如下
int n;static int m;int main()n就是具有外部鏈接的文件作用域變量
m就是具有內部鏈接的文件作用域變量
而對代碼塊作用域變量使用static關鍵字,才是把它從自動變量變?yōu)殪o態(tài)變量。
========================================
綜上可知,靜態(tài)變量是針對存儲時期這①維度的概念。
對于代碼塊作用域變量使用static關鍵字可以把自動變量變?yōu)殪o態(tài)變量。
對于文件作用域變量使用static關鍵字是說明鏈接類型。
========================================
即C語言的基于動態(tài)內存分配函數的存儲時期
和線程存儲時期。
還有是對于外部鏈接來說,在①個文件中定義聲明①次后,在另外①個文件中引用聲明后,就可以使用,這個有問題么?
沒有操作系統(tǒng),就是裸機。整臺機器就你①個程序,享有全部的內存空間。CPU運行之初,會設置好棧空間的起始地址。堆空間的起始地址是編譯器根據代碼段和數據段的地址和大小推算出來的。棧從高往低長,堆從低往高長。
棧的管理比較簡單,調用函數的時候會有壓棧和出棧的動作,編譯器已經生成好了這些代碼。
堆的管理,調用malloc,因為①般單片機的編譯器都有特定的修改,支持動態(tài)分配內存,例如分配和釋放內存,空閑內存的管理。但是管理算法比較簡單,會出現內存碎片。
好搜搖一搖咋將靜態(tài)圖變?yōu)閯討B(tài)圖?是什么樣
● 將允許用戶查看源代碼?微軟瞄準嵌入式設備
● 微軟是幕后黑手?SCO要消滅嵌入式Linux系統(tǒng)
● 8標準版預覽已發(fā)布?嵌入式Windows
● 召喚出什么樣有什么樣規(guī)律?圣斗士星矢重生十連抽
● 全明星探案是什么樣意思什么樣梗?UC瀏覽器3.19啥
● 什么樣情況下該用什么樣?火線指令戰(zhàn)柏林步推薦
● 七款CPU選購推薦?什么樣配什么樣彈
● 什么樣英雄站什么樣位?崩壞世界定位介紹
● 我跟你什么樣仇什么樣怨?《變身吧主公》天下第一比武大會
● 想要什么樣來什么樣?海島奇兵刷極品神像技巧
● 6月會出什么樣什么樣新戰(zhàn)機?全民飛機大戰(zhàn)6月預告
● 如何獲得FP?《萬千回憶》FP是什么樣有什么樣用
● 會開放什么樣新區(qū)域解鎖什么樣武器?封印者8.4二次轉職有獎勵
● 實驗體碎片有什么樣用能兌換什么樣?DNF咋獲得
本文來自電腦雜談,轉載請注明本文網址:
http://www.pc-fly.com/a/jisuanjixue/article-64244-1.html
總結
以上是生活随笔為你收集整理的c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字典是什么数据结构_Pyth
- 下一篇: 安装oracle需要多少内存,针对大型内