为什么在堆栈溢出的情况下,“alloca”只能返回“NULL”?

时间:2017-06-28 02:23:06

标签: c stack-overflow

我正在编写一个库,其中我发现非标准C函数alloca非常有用。多个来源(linux man pagesthis SO question)提醒您不要使用alloca。与malloc和朋友不同,当你的堆内存不足时,它们应该返回NULL,如果堆栈溢出,使用alloca是未定义的行为。在我的情况下,我对我分配的对象的大小有很大的限制(由大量assert语句强制执行),所以我认为这个完全明智的警告并不是问题。< / p>

尽管如此,我不明白为什么alloca必然会在这种情况下导致未定义的行为。 为什么不能alloca检查堆栈指针的位置,并在堆栈溢出可能的情况下返回NULL实现这些检查当然是平台和特定于建筑,但我不明白为什么它不可能。

0 个答案:

没有答案