全域性變數和區域性變數在記憶體中的區別

2021-07-15 04:20:05 字數 1320 閱讀 8605

static函式和普通函式區別作用域記憶體儲存數量

關於變數訪問速度的相關備忘

1、棧區(stack):——– 由編譯器自動分配釋放(存放函式的引數值區域性變數的值等),操作方式類似於資料結構中的棧;

2、堆區(heap):——– 由程式設計師分配釋放,如果不釋放可能由os**,但區別與資料結構中的堆,其分配方式類似於鍊錶;

3、全域性區/靜態區(全域性變數/static):——-全域性變數和靜態static變數是放在一起

4、文字常量區:——常量字串,放在.rodata

5、**區:——- 存放函式體的二進位制**.text

int a = 0; //全域性初始化區域.data

char *p1; //全域性為初始化 .bss

int main()

static是靜態的全域性,作用於只是當前原始檔的全域性範圍;

只初始化一次,防止在其他檔案單元中被引用。

普通全域性變數,作用域是整個源程式

①普通變數加上static變為靜態區域性變數後,儲存 區域有棧區->全域性區,因此生存期也變為整個程式執行過程。

②值初始化一次,下一次依據上一次結果。

static函式

①作用域只能當前原始檔,也稱為內部函式,它需要在當前原始檔中說明定義;

在記憶體中只有乙份

普通函式

可以在原始檔以外使用的函式,應在乙個標頭檔案中說明,要使用這些函式則需要包含該標頭檔案;

每個呼叫它的函式都維持乙份拷貝

一般來講,區域性變數的速度要快於全域性變數。這樣就是為什麼在函式內部定義的區域性變數,尤其是在某個**段需要重複呼叫多次時,由於區域性變數回放在cache緩衝區中,這裡的讀取速度較快。

但是,這不能絕對。

全域性變數和區域性變數在記憶體中的區別

答 有區別。全域性變數儲存在記憶體的全域性儲存區中,占用靜態的儲存單元 區域性變數儲存在棧中,只有在所在函式被呼叫時才動態地為變數分配儲存單元。該題目考查的知識點是變數的儲存型別及性質。c語言經過編譯之後將記憶體分為以下幾個區域 2 堆 heap 用於程式動態申請分配和釋放空間。c語言中的mallo...

全域性變數和區域性變數在記憶體裡的區別?

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...

全域性變數和區域性變數在記憶體裡的區別?

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...