動態記憶體分配

2021-07-06 10:16:03 字數 1079 閱讀 6490

什麼是系統記憶體?

答:物理狀況是:記憶體條.

1.棧區—

系統自動分配空間即**空間,——

函式體內定義的變數(區域性變數)存放在棧區,當出了它所屬的函式,系統就把空間**.

如:在main函式裡面定義int a=10;//a存放在棧區,10放在常量區,把常量區的10拷貝乙份,放在棧區,即a(10).

棧區存放的是區域性變數. 2.

堆區—重點:動態記憶體分布———由使用者分配和**,如果程式設計師未**.那麼系統記憶體就會越來越少 ,當記憶體不夠用的時候,程式崩潰.如果沒有達到記憶體的最大值,程式不會崩潰,程式退出時,系統把空間**.

3.靜態區(

全域性區:存放全域性變數的記憶體空間,),————定義在

函式體外面的變數,由系統開闢空間,程式執行過程中一直存在,知道程式退出,由系統**.

如:屬性就是存放在靜態區

4.常量區-用於存放常量的記憶體區域

如10,25,』a』,」helleo」

5.**區://存放**編譯結果的區域.

我們寫的**是源**,電腦不識別,需要編譯,編譯成二進位制,二進位制存放在**區.

堆區的記憶體分配:-----------------------------------重點

malloc分配指定大小的記憶體空間,但是不會把分配的空間清0

//malloc

void * p=malloc(10);//即向系統申請10個記憶體空間,返回首位址,p指向這個首位址

//以上就是開闢記憶體空間,malloc分配指定大小的記憶體空間,但是不會把分配的空間清0

free(p);//釋放記憶體空間

char * str=malloc(8);

strcpy(str,」iphone」);

pritf(%s,str);

free(str);

?表示以前是什麼,還是什麼

free為標記刪除:不清除內容,只是歸還空間(例子:歸還房子)

relese:釋放記憶體

例二:int *p=malloc(4);

*p=30;  

//這裡的*是取值

pritf:(「%d」,*p);

free(p);

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...

動態記憶體分配

c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...