new和delete是運算符,不是函數,不須要頭文件,用於動態分配和撤銷內存的運算符 程序員
new用法: 編程
1. 開闢單變量地址空間 數組
1)new int; //開闢一個存放數組的存儲空間,返回一個指向該存儲空間的地址.int *a = new int 即爲將一個int類型的地址賦值給整型指針a. 數據結構
2)int *a = new int(5) 做用同上,可是同時將整數賦值爲5 函數
2. 開闢數組空間 spa
一維: int *a = new int[100];開闢一個大小爲100的整型數組空間 操作系統
二維: int **a = new int[5][6] 線程
三維及其以上:依此類推. 指針
通常用法: new 類型 [初值] code
delete用法:
1. int *a = new int;
delete a; //釋放單個int的空間
2.int *a = new int[5];
delete [] a; //釋放int數組空間
要訪問new所開闢的結構體空間,沒法直接經過變量名進行,只能經過賦值的指針進行訪問.
用new和delete能夠動態開闢,撤銷地址空間.在編程序時,若用完一個變量(通常是暫時存儲的數組),下次須要再用,但卻又想省去從新初始化的功夫,能夠在每次開始使用時開闢一個空間,在用完後撤銷它.
1、malloc()和free()的基本概念以及基本用法:
一、函數原型及說明:
頭文件:在TC2.0中能夠用malloc.h或 alloc.h (注意:alloc.h 與 malloc.h 的內容是徹底一致的),而在Visual C++6.0中能夠用malloc.h或者stdlib.h。
void *malloc(long NumBytes):該函數分配了NumBytes個字節,並返回了指向這塊內存的指針(void* 表示未定義指針類型)。若是分配失敗,則返回一個空指針(NULL)。
關於分配失敗的緣由,應該有多種,好比說空間不足就是一種。
void free(void *FirstByte): 該函數是將以前用malloc分配的空間還給程序或者是操做系統,也就
是釋放了這塊內存,讓它從新獲得自由。
二、函數用法
程序代碼: // Code... char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr) { exit (1); } gets(Ptr); // code... free(Ptr); Ptr = NULL; // code...一、malloc()到底從哪裏獲得了內存空間?答案是從堆裏面得到空間。也就是說函數返回的指針是指向
二、什麼是堆:堆是你們共有的空間,分全局堆和局部堆。全局堆就是全部沒有分配的空間,局部堆就
是用戶分配的空間。堆在操做系統對進程初始化的時候分配,運行過程當中也能夠向系統要額外的堆,
可是記得用完了要還給操做系統,要否則就是內存泄漏。
三、什麼是棧:棧是線程獨有的,保存其運行狀態和局部自動變量的。棧在線程開始的時候初始化,每
個線程的棧互相獨立。每一個函數都有本身的棧,棧被用來在函數之間傳遞參數。操做系統在切換線程的
時候會自動的切換棧,就是切換SS/ESP寄存器。棧空間不須要在高級語言裏面顯式的分配和釋放。
總之,棧是由編譯器自動分配釋放,存放函數的參數值、局部變量的值等。操做方式相似於數據結構中的
棧。堆通常由程序員分配釋放,若不釋放,程序結束時可能由OS回收,可是這的堆與操做系統的堆是兩回事,它的操做相似鏈表。