(这只是在下的粗浅理解,不足的地方还请谅解,欢迎留言提出,后期理解深入后会加以改进)
C语言使用malloc/calloc/realloc/free进行动态内存管理。
void* malloc(size_t size);
分配长度为size字节的内存块,如果分配成功,返回指向被分配内存的指针,失败则返回NULL;
void* calloc(size_t n,size_ size);
在内存的动态存储区中分配n个长度为size的连续空间,成功返回被分配内存的地址,失败返回NULL;
calloc在分配内存后会自动初始化内存空间为0,而malloc不会初始化
void* realloc(void* p,size_t newsize);
首先会判断当前指针是否有足够大的空间,有则扩大p指向的地址,并返回p,若空间不够,则会重新分配newsize大小的空间,并将原数据全部拷贝到新内存中,然后释放掉原p指向的空间,同时返回新空间的地址
void free(void *ptr);
释放ptr所指向的内存,并将其返回给堆,