程式的區域性變數全域性變數動態申請資料分別儲存在什麼地方

時間 2021-08-30 10:54:02

1樓:海天盛

普通區域性變數在堆疊空間上分配,當區域性變數的函式被多次呼叫時,區域性變數每次在堆疊上的位置都不相同。還可以在堆上動態分配區域性變數(malloc),但是要記住在耗盡堆空間後釋放zd。

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

擴充套件資料:

注意事項:

對區域性變數進行分類

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

2.訪問許可權:靜態區域性變數只能由其作用域內的變數或函式訪問。也就是說,儘管它將存在於程式的整個生命週期中,但是其他函式和原始檔不能訪問它,因為它是靜態的。

3.值:如果使用者沒有初始化靜態區域性變數,編譯器會自動將其賦值為0,每次呼叫靜態區域性變數時都會使用最後一次呼叫後的值。

2樓:偶梅花象婷

靜態儲存方式是指在程式執行期間分配固定的儲存空間的方式,動態儲存方式是在程式執行期間根據需要進行動態的分配儲存空間的方式。

每乙個變數均有作用域和儲存類別兩個屬性,這些屬性共同用於描述乙個變數,這些不同型別的變數與儲存位置的關係如下:

外部變數(全域性變數)、靜態外部變數、靜態區域性變數儲存在靜態儲存區。

自動區域性變數(區域性變數預設為自動區域性變數)、函式形參保存在動態儲存區,不論是靜態儲存區還是動態儲存區均屬於記憶體中的使用者區。

但是,暫存器變數是儲存在cpu暫存器中的而不是記憶體中。

首先說明一下與作用域相關的幾個屬性:

區域性變數:在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的,這種型別的變數就稱為「區域性變數」。

全域性變數:在函式外定義的變數,可以為本原始檔中其它函式所公用,有效範圍為從定義變數的位置開始到本原始檔結束,這種型別的變數就稱為「全域性變數」。

接下來說明一下與儲存型別相關的幾個屬性:

atuo:在宣告區域性變數時,若不指定

static,預設均是

auto,這類變數都是動態分配儲存空間的,資料儲存在動態儲存區中。

static:在宣告區域性變數時,使用關鍵字

static

將區域性變數指定為「靜態區域性變數」,這樣在函式呼叫結束後不消失而保留原值,即占用的儲存單元不釋放,在下一次函式呼叫時,該變數已有值就是上次函式呼叫結束時的值。

register:在宣告動態區域性變數或者函式形參時,可將變數宣告為register,這樣編譯系統就會為變數分配乙個暫存器而不是記憶體空間,通過這種方式可提公升對某些區域性變數頻繁呼叫的程式的效能。(暫存器運算速度遠高於記憶體)

extern:用於擴充套件全域性變數的作用域,比如如果函式想引用乙個外部變數,但該外部變數在該函式後定義,那麼這個函式需要使用

extern

來宣告變數,這樣才能使用在該函式後面定義的全域性變數。此外,extern

還可以在多檔案的程式中宣告外部變數。

由於變數從不同維度劃分,形成了多種錯綜複雜的關係,在學習程式設計的時候需要重點關注。

3樓:匿名使用者

區域性變數-----棧 stack

全域性變數,靜態變數-----初始化的存在資料段,未初始化的存在bss段,上電後統一清0,我們一般都說存在全域性靜態資料區

常量----常量資料區

動態申請的---堆

全域性變數和區域性變數有什麼區別,全域性變數 靜態全域性變數 靜態區域性變數和區域性變數的區別

全域性變數的作用域是到應用程式結束 區域性變數的作用域是程式或函式執行結束 靜態變數是用static 將區域性變數的值保留下來,知道應用程式結束為止。只要在宣告變數的開始用static命令,變數就會自動變成靜態變數 全域性變數 靜態全域性變數 靜態區域性變數和區域性變數的區別 c 變數根據定義位置的...

區域性變數和全域性變數的名字相同時,變數在全域性和區域性的值是多少,如下兩種情況

你這兩個程式,都是錯的,不可能有 能在main 函式中再去定義乙個fuction函式,所以你的問題沒法回答。再看看書中的題是怎樣描述的! 逃離世界 第乙個執行完function,全域性函式中,x的值是0 例二中x的值是1 例1中的變數x是在函式的棧空間,所以不影響全域性變數x 例2中因為直接對全域性...

JSP中區域性變數和全域性變數的作用範圍

育知同創教育 jsp中的區域性和全域性變數定義方法 全域性變數的定義方法 變數型別 變數名 如,定義一個int型的全域性變數a寫法如下 int a 區域性變數定義方法 變數型別 變數名 如,定義一個string型的區域性變數b寫法如下 string sign 1 其實你換種方式看,jsp最終會轉譯成...