美文网首页
C++ 优化:for循环展开

C++ 优化:for循环展开

作者: fck_13 | 来源:发表于2020-03-26 01:08 被阅读0次

我写了一段代码:

#include <cstddef>
const size_t array_length = 1024*1024*256;

int main()
{
    auto arr = new char[array_length];

#ifdef NO_EXPEND
for(size_t i = 0; i<array_length; i ++){
        arr[i] = 0;
    }

    for(size_t i = 0; i<array_length; i ++){
        arr[i] = arr[i] + 1;
    }
#else
    for(size_t i = 0; i<array_length; i = i+8){
        arr[i] = 0;
        arr[i + 1] = 0;
        arr[i + 2] = 0;
        arr[i + 3] = 0;
        arr[i + 4] = 0;
        arr[i + 5] = 0;
        arr[i + 6] = 0;
        arr[i + 7] = 0;
    }

    for(size_t i = 0; i<array_length; i = i + 8){
        arr[i] = arr[i] + 1;
        arr[i + 1] = arr[i + 1] + 1;
        arr[i + 2] = arr[i + 2] + 1;
        arr[i + 3] = arr[i + 3] + 1;
        arr[i + 4] = arr[i + 4] + 1;
        arr[i + 5] = arr[i + 5] + 1;
        arr[i + 6] = arr[i + 6] + 1;
        arr[i + 7] = arr[i + 7] + 1;
    }
#endif
    delete [] arr;
    return 0;
}

运行结果如下:


image.png

我们可以看到,在for循环展开可以提高代码的执行效率,主要的原因有以下两点
1、提高缓存命中(cache hit)率
2、减少分支预测,当前例子下,也可以简单的理解为条件判断减少。

相关文章

  • C++ 优化:for循环展开

    我写了一段代码: 运行结果如下: 我们可以看到,在for循环展开可以提高代码的执行效率,主要的原因有以下两点1、提...

  • 第五章:优化程序性能

    本章主要介绍了妨碍编译器进行大量优化的因素,比如内存别名使用和过程调用,同时还介绍了循环展开技术,它可以利用现代处...

  • 深入理解编译优化之循环展开和粗化锁

    简介 之前在讲JIT的时候,有提到在编译过程中的两种优化循环展开和粗化锁,今天我们和小师妹一起从Assembly的...

  • 循环展开

    循环展开,英文中称(Loop unwinding或loop unrolling),是一种牺牲程序的尺寸来加快程序的...

  • C++优化:享元模式(flyweight)

    其实准确的说,这应该不算是C++的优化,应该是设计模式上的优化。我们用C++的代码来讲一下这个模式,勉强算是C++...

  • 内存池

    参考资料 C++内存池介绍与经典内存池的实现 C++ 应用程序性能优化,第 6 章:内存池 linux c++ 内...

  • C++ Short String Optimization st

    简单说明:C++ Short String Optimization 指C++针对短字符串的优化。 默认情况下,C...

  • C++之返回值优化

    返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术。它最大的...

  • 如何让glog性能提高10倍

    摘要:优化glog源码,性能提高10倍 背景 最近在给glog做性能优化, 使用c++版本 glog-0.3.4做...

  • windows下 c++ 崩溃时,生成dump

    在程序启动时注册处理函数 注意 Release版本,需要配置: c/c++>优化>优化 选择 已禁用/Od c/...

网友评论

      本文标题:C++ 优化:for循环展开

      本文链接:https://www.haomeiwen.com/subject/vofxuhtx.html