我正在编写一个库,其中我发现非标准C函数alloca
非常有用。多个来源(linux man pages,this SO question)提醒您不要使用alloca
。与malloc
和朋友不同,当你的堆内存不足时,它们应该返回NULL
,如果堆栈溢出,使用alloca
是未定义的行为。在我的情况下,我对我分配的对象的大小有很大的限制(由大量assert
语句强制执行),所以我认为这个完全明智的警告并不是问题。< / p>
尽管如此,我不明白为什么alloca
必然会在这种情况下导致未定义的行为。 为什么不能alloca
检查堆栈指针的位置,并在堆栈溢出可能的情况下返回NULL
?实现这些检查当然是平台和特定于建筑,但我不明白为什么它不可能。