c - VLA 的内存在 gcc 下可用

标签 c variable-length-array

当 malloc 返回 NULL 时,有什么方法可以使用 VLA 检测堆栈上的内存不足吗?

最佳答案

您可以希望发生崩溃,但最坏的情况是一切似乎都正常,您最终会写入其他内存。至少默认情况下 gcc 不会生成代码来尝试验证内存是否可用(尽管有一个选项),因此足够大的 VLA 可以在任何地方结束。在 MacOS 上,您只需要在线程进程中使用 0.5MB VLA 就可以意外地结束写入其他线程的堆栈。 Linux 上 10MB。

如果您不能保证 VLA 很小(少于一两页),请不要使用它。

关于c - VLA 的内存在 gcc 下可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131941/

相关文章:

c - 在c中打印垃圾值而不是数组中的最大值

c++ - C++ 函数调用中的字符串引用未更新

十进制转二进制错误(C)

c++ - GCC/G++ 对 : void* to int 的不同态度

c++ - 为什么全局数组大小应该是整数常量?

c++ - 如何确定代码在内核空间中花费大量时间的位置(系统调用)

c - 可变长度数组的 sizeof 计算

c - 矩阵作为 C89 中的函数参数

c - C 中 VLA 的问题

c++ - 使用非常量函数参数初始化数组