C语言 alloca函数
alloca() 函数用于申请栈空间,这也意味着申请的空间在当前函数结束后会自动释放。
#include <alloca.h>
void *alloca(size_t size);
但是函数栈的大小是有限制的,所以通过该函数申请的空间也是有上限的。一旦申请的空间超过了函数栈的大小,即申请空间失败,该函数不会像 malloc() 函数那样返回空指针,而是会导致栈溢出,很有可能使得程序崩溃。
因此,当要申请大量空间时,最好申请堆空间,可以使用malloc()函数。
函数栈的大小上限在Visual Studio里是可以修改的,修改如下选项,项目-> 属性 -> 链接器 -> 系统 -> 堆栈保留大小
这里的堆栈其实说的就是栈区,是栈区的另一种说法。
需要注意的是,这里设置的是栈区的合计大小,也就是整个程序的栈区大小。