- 这三个函数的作用都是用来分配一块连续的内存空间以供使用,使用过一定要调用free函数释放内存,否则会造成内存泄漏。
一、 malloc
1.函数原型
void *malloc(size_t size);
2.功能
malloc()在内存的动态存储区中分配一块长度为size字节的连续区域。参数size为需要的内存空间的长度,返回该区域的地址。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)malloc(sizeof(Class) * num);
free(allClass);
二、calloc
1.函数原型
void *calloc(size_t nmemb, size_t size);
2.功能
calloc()与malloc()相似,参数size为申请地址的单位元素长度,nmemb为参数个数。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)calloc(num, sizeof(Class));
free(allClass);
三、realloc
1.函数原型
void *realloc(void *ptr, size_t size);
2.功能
realloc()是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址空间。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)realloc(allClass, sizeof(Class) * num);
free(allClass);
四、区别
- malloc就是简单的分配内存空间,如果当初这块内存被分配过,可能会遗留脏数据。
- calloc会在分配内存的时候对内存初始化清零。
- realloc是对给定指针指向的内存空间进行扩大缩小,当扩大一块内存空间时,realloc试图直接从现存的数据后面的那些字节中获得附加的字节。如果后面的字节不够,那么就使用堆上第一个足够满足要求的自由空间块,现存的数据然后就被拷贝到新的位置上,而老块则放回堆空间,所以相关数据有被移动位置的可能。缩小内存时,超出内存的数据将被丢弃。