記憶體分配學習

2021-10-14 08:02:38 字數 2060 閱讀 2023

1.儲存類別

被儲存的每個值都占用一更的物理記憶體,c語言把這樣的一塊記憶體叫做物件。乙個物件可以儲存乙個或多個值。乙個物件可能未存實際的值,但是在儲存適當的值時一定具有相應的大小。

可以用儲存期來描述物件,用識別符號訪問物件。用作用於和鏈結藐視識別符號。

1.1作用域

作用域描述程式中可訪問識別符號的區域。塊作用域、函式作用域、函式原型作用域或檔案作用域。

塊作用域:如函式體,定義在塊中的變數具有塊作用域,

double

blocky

(double cleo)

其中花括號裡的變數都具有塊作用域,但花括號前的形參定義也具有塊作用域,屬於該函式體。

函式作用域僅適用於goto語句。

函式原型作用域用於函式原型中的形參名。

int

mighty

(int mouse,

double large)

;

從形參定義處到原型宣告結束。編譯器在處理函式原型中的形參時只關心它的型別,形參名無關緊要。只有在變長陣列中形參名才有用。

void

use_a_vla

(int n,

int m, ar[n]

[m])

;

檔案作用域:定義在函式外面的變數具有。從定義處到該定義所在檔案的末尾均可見。

#include

int units =0;

/*該變數具有檔案作用域*/

void

critic

(void);

intmain

(void

)void

critic

(void

)

main()和critic()都可以使用變數units。也成全域性變數。

ps:c預處理是用包含的標頭檔案替換#include指令。所以編譯器源**檔案和所有的標頭檔案都可以看成是乙個包含資訊的單獨檔案,被稱為翻譯單元。而檔案作用域作用於整個翻譯單元。

1.2鏈結

「內部鏈結的檔案作用域」簡稱「檔案作用域」,「外部鏈結的檔案作用域」簡稱「全域性作用域」。儲存類別說明符,static。

int giant =5;

//檔案作用域,外部鏈結

static

int dodgers =3;

//全域性作用域,內部鏈結

intmain

(void

)

1.3儲存期

靜態儲存期,程式執行期間一直存在。

執行緒儲存期,從宣告到執行緒結束一直存在。

塊作用域的變數具有自動儲存期,退出塊時釋放記憶體。變長陣列從宣告處開始而不是塊開始處。當塊作用域變數宣告時加上static關鍵字,可以擁有靜態儲存期。

void

more

(int number)

只要在執行該函式時,程式才能通過ct訪問它所指物件,但是該函式可以提供該儲存區的位址以間接訪問該物件,如指標形參或返回值。

另五中儲存類別,

儲存類別

儲存期作用域

鏈結宣告方式

自動自動塊無

塊內暫存器自動塊

無塊內,使用關鍵字register

靜態外部鏈結

靜態檔案

外部所有函式外

靜態內部鏈結

靜態檔案

內部所有函式外,使用關鍵字static

靜態無鏈結

靜態檔案

無塊內,使用關鍵字static

1.4多檔案

多檔案共享乙個外部變數時,除乙個定義式宣告外,其他宣告都要使用extern關鍵字,而且只有定義式宣告才可以初始化變數。

ps:如果外部變數定義在乙個檔案中,那麼其他檔案在使用變數之前必須宣告它(extern關鍵字)

1.5儲存類別和函式

外部函式或靜態函式,c99多了內聯函式。

通常用extern宣告定義在其他檔案中的函式,除非使用關鍵字static,否則預設extern。

C 記憶體分配學習

clr記憶體分配分三大塊區域 棧 gc堆 大物件堆。一 執行緒堆疊 棧 用於分配值型別例項。棧由作業系統進行管理,不受gc管理,當值型別不在其作用域 主要是指其所在函式內 時,其所佔棧空間自動釋放。棧的執行效率是非常高的。二 gc堆 堆 用於分配小物件例項。所謂小物件就是大小小於85000位元組的例...

OpenSSL學習筆記 記憶體分配

申請記憶體的執行緒號 const char file 申請記憶體的檔名 int line 申請記憶體的行號 tail of thread s stack int references 被引用的次數 這個結構體是用來記錄使用者申請的記憶體資訊的。typedef struct mem st mem 這個...

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...