alloca()在堆栈上而不是在堆上分配内存,如malloc(). 因此,当我从例程返回时,内存被释放。所以,实际上这解决了我释放动态分配内存的问题。释放通过分配的内存malloc()是一个令人头疼的问题,如果以某种方式错过会导致各种内存问题。
alloca()
malloc()
alloca()尽管有上述功能,为什么不鼓励使用?
答案就在man页面中(至少在Linux上):
man
返回值 alloca() 函数返回一个指向已分配空间开头的指针。如果分配导致堆栈溢出,则程序行为未定义。
这并不是说它永远不应该被使用。我从事的 OSS 项目之一广泛使用它,只要您不滥用它(alloca“巨大的价值”),就可以了。一旦超过“几百字节”标记,就该使用malloc和朋友了。你可能仍然会遇到分配失败,但至少你会有一些失败的迹象,而不是仅仅吹出堆栈。
alloca
malloc