我自己的一个策略是在程序启动时分配5兆字节的内存(或者你认为必要的任何数字).
然后,当程序malloc()
返回任何一点时NULL
,你释放5兆字节并malloc()
再次调用,这将成功并让程序继续运行.
您对此策略有何看法?
你还知道其他什么策略?
谢谢,Boda Cydo.
小智 13
通过优雅地退出来处理malloc故障.使用现代操作系统,页面文件等,您永远不应先发制人地支持内存故障,只需优雅退出即可.除非您有算法问题,否则您不太可能遇到内存不足错误.
此外,在启动时无缘无故地分配5MB是疯狂的.
在过去几年中,我一直使用的(嵌入式)软件通常不允许使用malloc().唯一的例外是它在初始化阶段是允许的,但是一旦确定不允许更多的内存分配,所有将来对malloc()的调用都会失败.由于malloc()/ free()导致内存可能变得碎片化,因此在很多情况下最好很难证明将来对malloc()的调用不会失败.
这种情况可能不适用于您的情况.但是,知道malloc()失败的原因可能很有用.我们在代码中使用的以下技术,因为malloc()通常不可用,可能(或可能不)适用于您的场景.
我们倾向于依赖内存池.每个池的内存在瞬态启动阶段分配.一旦我们拥有了这些池,我们就会在需要时从池中获取一个条目,并在完成后将其释放回池中.每个池都是可配置的,通常保留用于特定的对象类型.我们可以跟踪每个时间段的使用情况.如果我们用完了池条目,我们可以找出原因.如果我们不这样做,我们可以选择缩小我们的游泳池并节省一些资源.
希望这可以帮助.