alloca()函数用来在栈中分配size个字节的内存空间,因此函数返回时会自动释放掉空间。alloca函数定义及库头文件如下:
/* Allocate a block that will be freed when the calling function exits. */ |
返回值:若分配成功返回指针,失败则返回NULL。
它与malloc()函数的区别主要在于:
alloca是向栈申请内存,无需释放,malloc申请的内存位于堆中,最终需要函数free来释放。
int main()
{
int *p = (int *)alloca(sizeof(int)*10);
free(p);//此时不能用free()去释放,会导致错误
return 0;
}
malloc函数并没有初始化申请的内存空间,因此调用malloc()函数之后,还需调用函数memset初始化这部分内存空间;alloca则将初始化这部分内存空间为0。
int *p = (int *)alloca(sizeof(int)*10);
free(p);//此时不能用free()去释放,会导致错误
return 0;
}