malloc和calloc
malloc和calloc
malloc
malloc定义
#include <stdlib.h>
#include <malloc.h>
/*
* Funtion :memory allocation,动态内存分配,分配长度为size字节的内存块
* Argument :所需的内存块长度
* Return :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
*/
void *malloc(size_t size);
malloc用例
#include<stdio.h>
#include<malloc.h>
int main()
{
char *p;
//申请内存
p=(char *)malloc(100*sizeof(char));
//检查是否申请成功
if(p)
printf("Memory Allocated at: %x/n",p);
else
printf("Not Enough Memory!/n");
//释放内存
free(p);
return 0;
}
calloc
calloc定义
#include <stdlib.h>
#include <malloc.h>
/*
* Funtion :clear allocation,动态内存分配并清零
* Argument :n个长度为size的内存块长度
* Return :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
*/
void *calloc(size_t n, size_t size);
calloc用例
#include<stdio.h>
#include<malloc.h>
int main()
{
char *p;
//申请内存
p=(char *)calloc(100,sizeof(char));
//检查是否申请成功
if(p)
printf("Memory Allocated at: %x/n",p);
else
printf("Not Enough Memory!/n");
//释放内存
free(p);
return 0;
}
malloc与calloc的差别
- 传入的参数不一样
- malloc,所需size大小的内存块
- calloc,所需n个size大小的内存块
calloc = malloc + 清零 (如下)
p=(char )malloc(100sizeof(char));
memset(p,0,100*sizeof(char));//清零``p=(char *)calloc(100,sizeof(char));
深入理解malloc
- malloc实质体现在,它将可用的内存块连接成一个长链表。
- 调用malloc函数时,它沿链表寻找一个大到足以满足用户请求所需要的内存块。
- 调用free函数时,它将用户释放的内存块连接到链表上。
- 程序运行多次后,链表会被切成很多的小内存片段,即所谓的内存碎片化。
- 如果程序这时候申请一个较大的内存块,那么可能就无法满足该需求。malloc就会请求延时,在链表上检查和整理各个内存片段,将相邻的小内存块合并成较大的内存块。如此之后,还是无法获得符合要求的内存块,malloc函数就会返回NULL指针
还没有评论,来说两句吧...