当 malloc 返回 NULL 时,有什么方法可以使用 VLA 检测堆栈上的内存不足吗?
最佳答案
您可以希望发生崩溃,但最坏的情况是一切似乎都正常,您最终会写入其他内存。至少默认情况下 gcc 不会生成代码来尝试验证内存是否可用(尽管有一个选项),因此足够大的 VLA 可以在任何地方结束。在 MacOS 上,您只需要在线程进程中使用 0.5MB VLA 就可以意外地结束写入其他线程的堆栈。 Linux 上 10MB。
如果您不能保证 VLA 很小(少于一两页),请不要使用它。
关于c - VLA 的内存在 gcc 下可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131941/