《c专家编程》笔记--alloca函数

alloca()函数用来在栈中分配size个字节的内存空间,因此函数返回时会自动释放掉空间。alloca函数定义及库头文件如下:

/* Allocate a block that will be freed when the calling function exits.  */
extern void *alloca (size_t __size) __THROW;   //从栈中申请空间

返回值:若分配成功返回指针,失败则返回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;
}

你可能感兴趣的:(《c专家编程》笔记--alloca函数)