最近,我在Windows上制作了一个CCTV节目的视频播放器程序.由于程序必须同时解码和播放许多视频流,我认为它可能会遇到malloc失败的情况,我在每个malloc之后添加检查.
但从口头上讲,在我在开源项目中阅读的这些开源程序代码中,我很少发现对malloc结果的任何检查.所以当malloc失败时,大多数程序都会崩溃.那不是不接受吗?
我在linux上编写服务器程序的同事会为100个客户端连接分配足够的内存.因此,虽然他的程序可能会拒绝101客户端,但它永远不会遇到malloc的失败.他的方法是否也适用于桌面应用程序?
Joh*_*kin 12
在Linux上,malloc()永远不会失败 - 相反,OOM杀手将被触发并开始杀死随机进程,直到系统崩溃.由于Linux是当今最流行的UNIX衍生产品,许多开发人员已经学会了从不检查结果malloc().这可能是你的同事忽视malloc()失败的原因.
在支持失败的操作系统上,我看到了两种常规模式:
编写一个自定义过程来检查结果malloc(),并abort()在分配失败时调用.例如,GLib和GTK +库使用这种方法.
存储"可清除"分配的全局列表,例如缓存,可在分配失败时清除.然后,再次尝试分配,如果仍然失败,则通过标准错误报告机制(不执行动态分配)报告.