C语言拆解循环 以空间换时间

拆解循环-以空间换时间
在编写循环处理程序的时候要充分利用cpu的指令缓存,要充分分解小的循环。特别是当循环体本身很小的时候,分解循环可以提高性能。
这里要注意,很多编译器并不能自动分解循环。不好的代码:
// 3d转化:把矢量 v 和 4x4 矩阵 m 相乘for (i = 0;i < 4;i ++){r[i] = 0;for (j = 0;j < 4;j ++){r[i] += m[j][i]*v[j];}}推荐的代码:
r[0] = m[0][0]*v[0] + m[1][0]*v[1] + m[2][0]*v[2] + m[3][0]*v[3];r[1] = m[0][1]*v[0] + m[1][1]*v[1] + m[2][1]*v[2] + m[3][1]*v[3];r[2] = m[0][2]*v[0] + m[1][2]*v[1] + m[2][2]*v[2] + m[3][2]*v[3];r[3] = m[0][3]*v[0] + m[1][3]*v[1] + m[2][3]*v[2] + m[3][3]*v[3];02
充分提取循环中的公共部分
对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个init的初始化程序中进行。
03
延时函数中的循环技巧
通常使用的延时函数均采用自加的形式:
void delay (void){ unsigned int i; for (i=0;i0;i--) ;}两个函数的延时效果相似,但几乎所有的c编译对后一种函数生成的代码均比前一种代码少13个字节,因为几乎所有的mcu均有为0转移的指令,采用后一种方式能够生成这类指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少13个字母。
但是,在循环中有通过循环变量“i”读写数组的指令时,使用预减循环有可能使数组超界,要引起注意。

与移动硬盘对比 NAS的5大优势
设计抗混叠滤波器的三个指导原则
小米5X与MIUI9发布会看点汇总、发布会在线直播观看,小米5X配置即将揭晓
小米 MIX2/魅族 PRO7/荣耀 V10/一加 5T评测,到底哪一款才是你的菜?
MAX2044 2.3GHz至4.0GHz SiGe混频器,
C语言拆解循环 以空间换时间
10分钟掌握EV1527无线模块编解码
如何测试红外传感器以确保其正常工作
第十章 OLED(硬件IIC)
5G速度与4G速度一致?5G的真正用途在哪
加密项目中快钱和慢钱的基本概念阐述
低价拓宽物联网传感器应用边界
一文了解标准输入、标准输出、标准错误
如何在UE4中设置光线追踪功能
当人工智能时代真正到来,人类会怎样?
!二手 吉时利 2000 吉时利2000 三用表 谭艳飞1
智慧园区通道闸管理,启用人脸识别门禁系统更高效更安全
技能见证明力 华硕联袂中国移动
基于SEMTECH射频集成芯片SX1280的无线收发器
从2D到3D,人脸识别的还有哪些可能?