cpp性能优化

函数调用的时候,参数传引用。尽量减少传递参数。

缓存buffer,把经常使用的数据缓存下来,避免重复计算。用空间换时间。

预计算,有时候计算方便,可以把后面的数据的数据一并计算,然后暂时存起。下个循环不用使用预计算的数据。

使用简单数据,能用string就不用vector of char. 能用char*就不用string。

数据大小固定,对齐。动态分配内存不如静态分配内存。

SIMD指令优化,一次处理多个数据。注意对齐问题。

缓存cache的命中率的问题,数据连续性,指令连续性。一个for循环调用两个大函数,函数之间访问的数据不一样。缓存的数据不连续,需要换页访问。造成性能降低。而分成两个循环虽然多了些循环的指令,但是数据是连续的,性能会更好。

根据数据出现概率频率,可以优化条件分支。

循环中,访问量多的变量可以使用寄存器。此外,在栈上的指令,数据会在cache中。比访问堆上的内存要快上不少。

顺序访问,用指针比数组索引要快。

如果数据是共享的,尽量使用单线程模型,多线程有一定开销。

线程的数据尽量独立,减少或避免同步的操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,737评论 0 73
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,557评论 1 4
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,412评论 0 6
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,470评论 0 35