此问题源自post。
在线compiler似乎在优化时就放弃了此功能。
void functiona()
{
long long number = 0;
// long long problemSize = 100000000000;
long long problemSize = 10;
for( long long i = 0; i < problemSize; ++i )
{
for(long long j = 0; j < problemSize; j++)
{
for(long long k = 0; k < problemSize; k++)
{
for(long long l = 0; l < problemSize; l++)
{
for(long long l = 0; l < problemSize; l++)
{
number++;
number--;
}
}
}
}
}
}
在我的本地Mac上编译this piece of code
clang++ -std=c++11 -stdlib=libc++ benchmark.cpp
./a.out
409
似乎没有优化。
有一种方法可以对clang ++进行优化,以使本地输出接近在线输出。
答案 0 :(得分:1)
clang++
的开关与clang
基本上相同,这些链接在您自己找到的链接中有完整介绍。最明显的最大优化方案是-Ofast
,但鉴于这种优化多么简单明了,基本上任何级别的优化都可能触发它,-O3
,-02
,{{1 }},甚至-Os
。确切的行为会因编译器版本而异,因此您可以尝试确定消除版本循环所需的最低级别。
答案 1 :(得分:1)
此命令可能会得到您想要的。
clang ++ -std = c ++ 11 -stdlib = libc ++ -O基准.cpp
-O
与-O2
等效,是clang++
提供的优化级别之一。
实际上,在这种特定情况下,其他级别也可以满足您的需求。