问题

alloca()在堆栈上分配内存而不是在堆上,例如在malloc()的情况下.所以,当我从例程返回时,内存被释放.所以,实际上,这解决了我释放动态分配的内存的问题.释放通过malloc()分配的内存是一个主要的头痛,如果以某种方式错过会导致各种内存问题.

尽管有上述特性,为什么不鼓励使用alloca()?

  最佳答案

答案在man页面中(至少在 Linux ):

返回VALUE alloca()函数返回指向开头的指针 分配空间。如果 分配原因 堆栈溢出,程序行为未定义.

这不是说它永远不应该被使用.我在广泛使用它的开放源码软件项目之一,只要你不滥用它(alloca’显示巨大的值),这很好.一旦你超过了“几百字节”标记,就应该使用malloc和朋友.你可能仍然会得到分配失败,但至少你会有一些失败的迹象,而不仅仅是吹出堆栈.

  相同标签的其他问题

cstackmallocallocationalloca