小编典典

为什么使用 alloca() 不被认为是好的做法?

all

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

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


阅读 92

收藏
2022-03-16

共1个答案

小编典典

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

返回值 alloca() 函数返回一个指向已分配空间开头的指针。如果分配导致堆栈溢出,则程序行为未定义。

这并不是说它永远不应该被使用。我从事的 OSS
项目之一广泛使用它,只要您不滥用它(alloca“巨大的价值”),就可以了。一旦超过“几百字节”标记,就该使用malloc和朋友了。你可能仍然会遇到分配失败,但至少你会有一些失败的迹象,而不是仅仅吹出堆栈。

2022-03-16