內存管理
1.堆和棧的區別:
1》棧的特征
1)、執行的速度相對較快;
2)、空間較小;
3)、生存期由系統決定;
4)、作用域較小;
5)、有名空間,可以通過變量名或者數據名訪問;
2》堆的特征
1)、執行的速度相對較慢;
2)、空間較大;
3)、生存期由“自己”決定,malloc申請,free釋放;
4)、作用域很大(整個程序都可以訪問);
5)、無名空間,只能通過指針使用;
2.如何對堆空間申請
1》申請空間
#include <stdlib.h>
void *malloc(size_t size);
功能:在堆中申請空間
size:要申請的空間的大小(字節數)
返回值類型:void * 該類型表明malloc返回的地址空間中的數據類型是不確定,必須經過強制類型轉換才可以使用。
返回值:成功時,返回malloc申請的空間的起始地址,失敗時,返回NULL。
特點:----》malloc申請的空間為連續空間;
----》malloc申請的是沒有初始化的空間;
void *calloc(size_t nmemb, size_t size);
特點:----》申請的空間是連續的;
----》申請的是已初始化的空間;
void *realloc(void *ptr, size_t size);
2》釋放空間
#include <stdlib.h>
void free(void *ptr);
參數ptr:
1)不能傳NULL;
2)不能給ptr傳申請的空間的一部分,例如:
3)不能釋放已經被釋放的空間;
4)不能使用已經被釋放的空間;