分类: C/C++
2014-11-04 16:55:43
原文地址:calloc和malloc 作者:李某人
calloc与malloc
都是动态分配内存。
void *malloc( size_t size ); //分配的大小
void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小
主要的不同是malloc不初始化分配的内存,calloc初始化已分配的内存为0。
次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
此外,要理解好calloc的效率一般是比较低的;
calloc等于malloc后在memset,很可能calloc内部就是一个malloc再来一个memset清0。当然是连续的.
函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。
原型:extern void *calloc(int num_elems, int elem_size);
用法:#include
功能:为具有num_elems个长度为elem_size元素的数组分配内存
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
举例:
// calloc.c
#include
#include
main()
{
char *p;
clrscr(); // clear screen
p=(char *)calloc(100,sizeof(char));
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
free(p);
getchar();
return 0;
}
malloc
原型:extern void *malloc(unsigned int num_bytes);
用法:#include
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
举例:
// malloc.c
#include
#include
main()
{
char *p;
clrscr(); // clear screen
p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
free(p);
getchar();
return 0;
}