首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gcc的带领下,VLA的内存可用

在gcc的带领下,VLA的内存可用
EN

Stack Overflow用户
提问于 2013-02-28 17:30:53
回答 3查看 182关注 0票数 0

当malloc返回NULL时,有没有办法检测到使用VLA的堆栈上内存不足?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 17:55:31

C中没有任何东西可以保证成功声明VLA或检查有关内存使用的故障。这对于自动对象的任何声明都是相同的,无论是否为VLA。

票数 1
EN

Stack Overflow用户

发布于 2013-02-28 18:25:40

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-28 17:34:10

malloc()检查堆,VLAs增加堆栈大小。如果malloc()返回NULL,那么您的堆栈也可能已被填满。

正如WhozCraig所指出的,不要拿VLA当赌注。如果数组大小很大-使用malloc()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15131941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档