我在哪里可以了解编译器和断言优化?



我们最近发现编译器(对我们来说是GCC)可以结合开发人员设置的断言来优化一些代码。

下面的代码,例如:

#include <cassert>
int getBatteryLevel(){
return 0;
}
int process(int level);
int main() {
[[maybe_unused]] const auto level = getBatteryLevel();
assert(level > 0);
process(level);
}

将链接到-O2,即使process没有实现。如果没有优化,它不能链接。

这在任何地方都有记录吗?

这在任何地方都有记录吗?

优化的文档不是很彻底。这里可能使用的优化是"内联展开","常量折叠";和"消除死码"。

哪里可以了解编译器

书籍是一个很好的起点,除非你打算从头开始发明计算。学术论文也可以包含好的信息,但是过滤掉不相关的东西,并找出所需的初步知识可能需要大量的工作。此外,它们每单位信息的价格往往相当昂贵。


注:如果没有定义常用的函数,那么程序就是病态的。语言实现允许接受错误格式的程序,但不是必需的。通常,需要它们来诊断这样的错误,但是在这种特殊情况下,不需要实现来诊断。

最新更新