alloca()
在堆栈上而不是在堆上分配内存,如 malloc()
的情况。所以,当我从例程返回时,内存被释放。所以,实际上这解决了我释放动态分配内存的问题。释放通过 malloc()
分配的内存是一个令人头疼的问题,如果不知何故错过会导致各种内存问题。
尽管有上述特性,为什么不鼓励使用 alloca()
?
最佳答案
答案就在 man
页面(至少在 Linux 上):
RETURN VALUE The alloca() function returns a pointer to the beginning of the allocated space. If the allocation causes stack overflow, program behaviour is undefined.
这并不是说永远不应该使用它。我从事的一个 OSS 项目广泛使用它,只要您不滥用它(alloca
'ing huge values),它就很好。一旦超过“几百字节”标记,就该改用 malloc
和 friend 了。您可能仍然会遇到分配失败,但至少您会有一些失败的迹象,而不仅仅是炸毁堆栈。
关于c - 为什么 alloca() 的使用不被认为是好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018853/