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

标签 c stack malloc allocation alloca

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/

相关文章:

c - 无法创建基于基本命令行参数的计算器

c - Lua C API : handling large numbers

java - 当递归函数被调用时,成员变量是否仍在缓冲区中?

c++ - 如何释放被返回的变量占用的内存(使用 C++,在类中,析构函数)?

c - 将缓冲区与 malloc 一起使用

c - 优化循环内的重复模数

C 从文本文件中读取单词

函数调用后栈的内容

c++ - 给定一组不同高度的堆栈,我如何选择所有可能的组合?

c - 为什么 C 中指针与整数和字符串的行为不同