【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

4、编译的时候,我们习惯于在头文件中包含很多其他的文件,不管他们对我们是有用还是没有用,殊不知这样会带来很大的麻烦。一方面,它会在我们修改头文件的时候造成麻烦,另外一方面会给我们的编译带来很多的麻烦。我们知道,一般的工程项目都有少则上百个,多则上千个上万个文件。如果在每一个文件上面节约一点编译的时间,那么久整个项目或者工程来说也是相当可观的。

5、尽量不要使用乘除,多使用移位操作

#define LOOP_MAX_NUMBER 10000000L
int data[LOOP_MAX_NUMBER] = {0, 1};
void test10()
{
    int m = GetTickCount();
    int inner = 0;
    int value = 10;
    for(inner = 0; inner < LOOP_MAX_NUMBER; inner ++)
    {
        data[inner] = inner / 16 + inner / 32 * 8;
    } 
 
    printf("%d\n", GetTickCount() - m);

m = GetTickCount();
    for(inner = 0; inner < LOOP_MAX_NUMBER; inner ++)
    {
        data[inner] = inner >> 4 + (inner >> 5) << 3;
    }
    printf("%d\n", GetTickCount() - m);
}

6、所谓SIMD指令就是指用一条指令,完成多个字节数据的操作,我们不妨看一个范例。

static void mmx_memcopy(void* dst, void* src, int len)
{
     __asm
     {
         mov ecx, [len]
         test ecx, ecx
         mov eax, 63
         mov esi, [src]
         jle over

and eax, ecx
         mov edi, [dst]
         sub ecx, eax
        jz  mov_remain

mov64bytes:
       add esi, 64
       add edi, 64
       sub ecx, 64
       movq mm0, [esi -64]
       movq mm1, [esi -64 + 8]
       movq [edi - 64], mm0
       movq [edi - 64 + 8], mm1
       movq mm2, [esi -64 + 16]
       movq mm3, [esi -64 + 24]
       movq [edi - 64 + 16], mm2
       movq [edi - 64 + 24], mm3
       movq mm4, [esi -64 + 32]
       movq mm5, [esi -64 + 40]
      movq [edi - 64 + 32], mm4
      movq [edi - 64 + 40], mm5
      movq mm6, [esi -64 + 48]
      movq mm7, [esi -64 + 56]
      movq [edi - 64 + 48], mm6
      movq [edi - 64 + 56], mm7
      ja mov64bytes

mov_remain:
      test eax, eax
      mov ecx, eax
      je over

shr eax, 3
      cmp eax, 7
      je mov_remain56

cmp eax, 6
      je mov_remain48

cmp eax, 5
      je mov_remain40

cmp eax, 4
      je mov_remain32

cmp eax, 3
      je mov_remain24

cmp eax, 2
      je mov_remain16

cmp eax, 1
      je mov_remain8

jmp mov_remain7

mov_remain56:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain48:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain40:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain32:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain24:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain16:
     movq mm0, [esi]
     sub ecx,8
     add esi,8
     movq [edi],mm0
     add edi, 8

mov_remain8:
     sub ecx, 8
     movq mm0, [esi]
     movq [edi], mm0

je over

add esi, 8
     add edi, 8

mov_remain7:
     rep movsb

over:
     emms
 }
}

这是一个简单的内存拷贝代码,它和我们通常意义上的C拷贝代码还是有很大的不同的,因为是8个字节一起复制的,所以它使用了mm0~mm7共8个寄存器,对于剩下来的余数字节又是分别进行处理的,所以一旦拷贝的数据量很大,效果还是相当明显的。

【注: 此处代码摘自 《C/C++多媒体开发案例实践》Page 40 ~ Page 42,版权属于原作者,转载请注意。】

(待续)

提高代码的运行效率 (3)相关推荐

  1. 提高代码的运行效率 (4)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] (7)尽量采用查询的方式,少采用计算的方式,注意分析经验数据 做过服务器侧软件的朋友都知道,单 ...

  2. 提高代码的运行效率(2)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 2. 在编写的代码的时候,我们强调需要对循环首先进行循环内部的计算,然后进行循环外面的计算.在 ...

  3. 提高代码的运行效率(1)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在下面的blog当中,我将会讲解一些提高个人代码效率的一些手段.这些手段都是被实践证明,切实可 ...

  4. 提高代码质量的那些建议

    程序员跟各行各业的手艺人一样,都是靠自己的作品吃饭.所以要想获得高收入和业界的认可就要不断的学习提高自己的业务水平.这里我总结了一些程序员提升代码质量的建议希望能对你的进阶有帮助. 1.提高代码的复用 ...

  5. 如何提高代码能力:程序员的成长之路(上)

    作为一名程序员,不仅需要具备一定的编程技术和知识,还需要不断提高自己的代码能力.代码能力是程序员在编写.阅读.理解和维护代码时所需要的技能和素养,它直接影响着程序员的工作效率.代码质量和职业发展.那么 ...

  6. 分享9个提高代码运行效率的小技巧

    学习之余看到的一片文章,转载出来,经常看看,好处多多! 我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使 ...

  7. 程序人生:提高代码运行效率的9个技巧

    我们写程序的目的,就是使它在任何情况下都可以稳定工作.一个运行的很快但结果错误的程序,并没有任何用处.在程序开发和优化的过程中,我们需要考虑代码使用的方式,以及影响它的关键因素.通常,我们要在程序的简 ...

  8. Java 性能优化:教你提高代码运行的效率

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:五月的仓颉 cnblogs.com/xrq730/p/486 ...

  9. 阿里程序员工作小技巧:理解CPU分支预测,提高代码效率

    技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,体现也会在优秀程序员在工作效率提升,产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...

最新文章

  1. 20155307 2016-2017-2 《Java程序设计》第10周学习总结
  2. 根据status信息对MySQL服务器进行优化-2
  3. 别再看GitHub的Star数了,这个数字更能反映项目流行趋势
  4. Go 语言编程 — Cobra 指令行工具
  5. 信息系统项目管理师:第1章:信息化与信息系统(2)-重点汇总
  6. 神策数据林美天于大数据与人工智能分享沙龙分享
  7. python大括号用法_Python中各种括号的区别、用途及使用方法
  8. 经典面试题(5):小心javascript自动插入分号机制
  9. CSS彻底研究(1)
  10. 【JSON】FastJson 打印输格式化输出
  11. IIS出现问题时修改配置文件的几项说明
  12. English trip EM2-PE 5B Presentation yourself favorite food Teacher:Ashley
  13. 【Android】SDK环境变量配置
  14. 若依微服务版 数据库设计说明书
  15. python 打卡记录代码_Python的100天打卡(上)
  16. 最小二乘法以及正交最小二乘(OLS)的推导与简单比较
  17. 招商银行深圳分行二面(技术面试)
  18. I Am Fortunate Indeed
  19. 第2台计算机的英文简写是,又一IP古装权谋剧来了!那么IP到底是哪两个英文的缩写?...
  20. 利用python将excle表格由xls转换为xlsx格式

热门文章

  1. MySQL字符集详解
  2. 数组实现UITabview的cell设置
  3. POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)
  4. F5 虚拟机下载 和 试用Key 申请
  5. 基于MINA构建简单高性能的NIO应用-优化指南
  6. DWZUI(1.3)框架中遇到的两个问题
  7. 纵览神经架构搜索方法
  8. discuz完善用户资料任务不能完成的解决方法
  9. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例...
  10. javaScript书写规范