1 記憶體四區

2021-09-25 16:50:46 字數 2358 閱讀 9416

資料型別的概念:

「型別」是對資料的抽象,型別相同的資料有相同的表現形式、儲存格式以及相關的操作。程式當中使用的所有資料都必定屬於某一種資料型別。

資料型別的本質:

資料型別可以理解為建立變數的模具,是固定記憶體大小的別名。資料型別為編譯器預算物件(變數)分配指定的記憶體空間大小。

資料型別的別名:

#include int main(void) 

資料型別的封裝:c語言規定只有相同型別的指標才可以互相賦值,但是void*指標作為左值可以用於「接收」任意型別的指標。當void*作為右值賦值給其他指標時需要強制型別轉換。

int *p1 = null;

char *p2 = (char *)malloc(sizoeof(char)*20);

c語言並沒有定義void究竟是多大記憶體的別名,所以不存在void型別的變數。void的字面意思就是「無型別」,void*則是「無型別指標」,void*可以指向任何型別的資料。

void * memcpy(void *dest, const void *src, size_t len);

void * memset ( void * buffer, int c, size_t num );

void修飾函式返回值和引數,僅表示無。如果函式沒有返回值,那麼可以將其宣告為void型別。如果函式沒有引數,應該將其引數宣告為void。

資料型別總結:

資料型別的本質是固定記憶體大小的別名:是乙個模具。c語言規定,通過資料型別定義變數。

資料型別大小通過「sizeof」進行計算。

可以給已經存在的資料型別通過「typedef」起別名。

資料型別可以通過void這個萬能型別進行封裝。

變數概念:

變數就是既能讀又能寫的記憶體物件,如果一旦進行初始化後就不能修改的物件被稱為常量。

//變數定義形式:型別 識別符號

int x;

int x,y,z;

變數本質:程式通過變數來申請和命名記憶體空間,通過變數名訪問記憶體空間,變數就是一段連續的記憶體空間的別名。

可以直接修改變數,也可以間接通過獲取記憶體位址修改記憶體資料。

#include #include int main()

記憶體四區的建立流程:1,作業系統把物理硬碟**載入到記憶體當中。

2,作業系統把c**分成了四個區。

3,作業系統找到main函式入口,開始執行。

各區元素分析:

棧區(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。

堆區(heap):一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束後可能由作業系統**。

全域性區,靜態區(static):全域性變數和靜態變數是儲存在一起的,初始化的全域性變數和靜態變數在一塊區域,還未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,該區域在程式結束後由作業系統釋放。

常量區:字串常量和其他常量的儲存位置,程式結束後由作業系統進行釋放。

程式**區:存放函式體的二進位制**。

基本執行原理:

呼叫main()函式,呼叫fa(),執行fa()**塊,呼叫fb(),執行fb()**塊。

#include int fa()

int fb()

int main()

記憶體四區模型和函式呼叫模型變數傳遞分析:堆區與棧區和函式個數沒什麼關係,堆區每個程式只有乙個,棧區分為程序棧和執行緒棧,每個程序乙個程序棧,每個執行緒乙個執行緒棧。

當函式巢狀呼叫時,實參位址傳給形參後,c++編譯器通過作用域管理變數的生命週期。

main函式中可以在棧區分配記憶體也可以在堆區分配記憶體,全域性分配記憶體。所以可以被fa、fb使用。但是,如果fb在棧上分配記憶體,則不能被fa和main使用。fb在堆區分配的記憶體,可以被main和fa使用。fb中進行全域性分配的記憶體,是可以被main和fa使用的。

記憶體四區筆記

include include include void print arr int buf,int n int main 棧中陣列 void malloc size t size char p1 malloc sizeof char 1000 free p1 int p malloc sizeof...

記憶體四區專題

程式的記憶體四區模型 1.作業系統把物理硬碟 load到記憶體中 2.作業系統把c 分成四個區 3.作業系統找到main函式入口執行 4.在被呼叫函式裡面malloc的記憶體,首位址傳給別呼叫哪個函式有兩種方法 a.return b.指標做函式引數 5.主呼叫函式分配的記憶體 堆 stack 全域性...

C 記憶體四區

c語言中,記憶體分為四個區域,區,全域性區,棧區,堆區。我們寫的 會被編譯成機器語言存放在這個區域內。一般存放的是兩種型別的變數 全域性變數,靜態變數,常量。特點是由系統分配空間,直到程式結束才釋放。定義在函式體外面的變數是全域性變數 int func int a 0 這是乙個全域性變數 intma...