当 malloc() 永不返回 NULL —— 可靠性只是一种错觉
软件工程
2023-01-04 v1
摘要
几十年来,给软件工程师的指导一直是检查内存分配结果。这一验证步骤对于避免崩溃是必要的。然而,在用户模式下,在 Android、FreeBSD、iOS 和 macOS 等现代操作系统(OS)中,调用者没有机会处理内存分配失败。这种行为特征源于一个名为内存耗尽(OOM)杀手(out-of-memory killer)的系统组件的动作。我们确认,默认情况下允许应用程序检测内存分配失败的唯一种主流操作系统是微软 Windows。应用程序能够处理 OOM 错误的错误预期会对其设计产生负面影响。错误处理代码的存在制造了一种可靠性的错觉,并且在代码行数和代码大小方面是浪费的。我们描述了一些流行操作系统在低内存条件下的当前行为,并为未来的工程实践提供建议。
引用
@article{arxiv.2208.08484,
title = {When malloc() Never Returns NULL -- Reliability as an Illusion},
author = {Gunnar Kudrjavets and Jeff Thomas and Aditya Kumar and Nachiappan Nagappan and Ayushi Rastogi},
journal= {arXiv preprint arXiv:2208.08484},
year = {2023}
}
备注
6 pages. To be published in the 33rd IEEE International Symposium on Software Reliability Engineering (ISSRE 2022), Oct 31 - Nov 3 2022, Charlotte, North Carolina, USA