RFC: 在 C 中执行边界安全(-fbounds-safety)

在开发 C 语言程序时,编译器自动执行内存边界检查可以有效地避免数组访问越界等问题。然而,这种自动化机制对于没有足够经验的程序员来说,似乎并不总是可靠的。为此,LLVM 开发者提出了一个新的措施:在 LLVM 中增加一个新的编译器标志,名为-fbounds-safety。

-fbounds-safety 旨在通过 LLVM 完全执行边界检查,从而进一步提高 C 语言的可靠性。具体来说,它会在编译时执行代码转换,以确保内存访问操作不会越界。相比于其他方案,这种方法不会对代码进行任何改变或添加新的注释,而是通过编译器在优化等级处更改代码生成器的行为来实现边界检查的严格执行。

要启用-fbounds-safety,只需要在使用 LLVM 的 Clang 编译器时添加其名称作为标志即可。但是,需要注意的是,在启用-fbounds-safety 的情况下,编译器将花费更多的时间来执行编译过程。这是因为启用未经过优化的边界检查需要对消耗更多的资源,并可能导致更长的编译时间。

但是,尽管在许多情况下,消耗更多时间执行边界检查可能会对编译时间产生不良影响,但是-fbounds-safety 的实施仍然可以为一些具有特定安全性需求的应用带来重大好处。随着时间的推移,许多编译器和其他工具已经开始使用-fbounds-safety标志来执行边界检查。在这个新的技术趋势的推动下,C 语言应用程序的可靠性有望获得显著提升。

详情参考

了解更多有趣的事情:https://blog.ds3783.com/