小编jcm*_*iro的帖子

用于循环性能差异和编译器优化


我选择了David的答案,因为他是唯一一个在没有优化标志的for循环中提供解决方案的人.其他答案说明了在设置优化标志时会发生什么.


Jerry Coffin的回答解释了为此示例设置优化标志时会发生什么.仍然没有答案的是,当B执行一次额外的内存引用和每次迭代一次添加时,superCalculationA的运行速度比superCalculationB慢.Nemo的帖子显示了汇编输出.-S根据Matteo Italia的建议,我在我的PC上确认了这个标志,2.9GHz Sandy Bridge(i5-2310),运行Ubuntu 12.04 64位.


当我偶然发现以下情况时,我正在试验for循环性能.

我有以下代码以两种不同的方式执行相同的计算.

#include <cstdint>
#include <chrono>
#include <cstdio>

using std::uint64_t;

uint64_t superCalculationA(int init, int end)
{
    uint64_t total = 0;
    for (int i = init; i < end; i++)
        total += i;
    return total;
}

uint64_t superCalculationB(int init, int todo)
{
    uint64_t total = 0;
    for (int i = init; i < init + todo; i++)
        total += i;
    return total;
}

int main()
{
    const uint64_t answer = 500000110500000000; …
Run Code Online (Sandbox Code Playgroud)

c++ performance gcc

11
推荐指数
4
解决办法
1399
查看次数

标签 统计

c++ ×1

gcc ×1

performance ×1