ron*_*nag 6 c++ compiler-construction optimization
给出以下代码:
while(is_running)
{
std::vector<buffer> buffers;
// fill buffers
// use buffers
}
Run Code Online (Sandbox Code Playgroud)
现代编译器是否执行以下转换?
std::vector<bufer> buffers;
while(is_running)
{
// fill buffers
// use buffers
buffers.clear();
}
Run Code Online (Sandbox Code Playgroud)
唯一确定的方法是进行测试,但我会很惊讶地看到优化器执行这种优化。
要开始执行此优化,编译器必须 1)足够了解所涉及函数的内部结构,以“实现”(例如)operator new和operator delete基本上是其他函数的镜像,或者 2)它会具有为所有内联函数生成所有代码(一直到operator newand的调用operator delete,并且有足够的智能能够从代码中推断出相同的结论。
我几乎无法想象第一个,但不记得曾经见过它。考虑到典型堆管理器的复杂性,第二个让我感到难以置信。
底线:我以前曾感到惊讶过,而且我确信我会再次感到惊讶——但会比大多数人都感到更大的惊喜。