c语言的标准内存分配函数有:malloc,calloc,realloc,free等。
c++的内存分配和释放函数为new和delete。
下面对alloca、malloc、calloc、realloc等函数进行详细说明。
alloca是向栈申请内存,无需进行释放。
malloc分配的内存是位于堆中的,且没有初始化内存中的内容,可以调用memset函数来初始化这部分的内存空间。
calloc会初始化所分配的内存,并且初始化为0.
realloc函数对malloc申请的内存进行大小的调整。
三个函数的声明分别为:
void* malloc(unsigned size);
void* realloc(void* ptr,unsigned newsize);
void* calloc(size_t num,size_t size);
区别:
1、函数malloc不能初始化所分配的内存空间,而函数calloc能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;
反之,如果这部分内存曾经被分配过,则其中可能遗留有曾经的数据。换句话说,使用malloc()函数的程序刚开始时(内存空间还没有被重新分配)
能正常进行,但进过一段时间(内存空间已经被重新分配)可能会出现问题。
2、函数calloc会将所分配的内存空间都初始化为0 ,也就是说,如果是给字符类型或者整数类型的元素分配内存,那么这些元素会被初始化为0;
如果是为指针类型的元素分配内存,那这些元素会被初始化为空指针;如果是为实型数据分配内存,则这些元素会被初始化为浮点型的零。