0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

麦辣鸡腿堡 来源:轩哥谈芯 作者:Debug 2023-11-20 18:05 次阅读

拆解循环-以空间换时间

在编写循环处理程序的时候要充分利用CPU的指令缓存,要充分分解小的循环。特别是当循环体本身很小的时候,分解循环可以提高性能。

这里要注意,很多编译器并不能自动分解循环。不好的代码:

// 3D转化:把矢量 V 和 4x4 矩阵 M 相乘
for (i = 0;i < 4;i ++)
{
r[i] = 0for (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;i< 1000;i++) ;
}

将其改为自减延时函数:

void delay (void)
{
  unsigned int i;
  for (i=1000;i >0;i--) ;
}

两个函数的延时效果相似,但几乎所有的C编译对后一种函数生成的代码均比前一种代码少13个字节,因为几乎所有的MCU均有为0转移的指令,采用后一种方式能够生成这类指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少13个字母。

但是,在循环中有通过循环变量“i”读写数组的指令时,使用预减循环有可能使数组超界,要引起注意。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7552

    浏览量

    131944
  • 程序
    +关注

    关注

    114

    文章

    3673

    浏览量

    79874
  • 编译器
    +关注

    关注

    1

    文章

    1588

    浏览量

    48797
收藏 人收藏

    评论

    相关推荐

    C语言基础知识(5)--循环语句

    C语言基础知识(5)--循环语句
    的头像 发表于 06-15 10:18 1577次阅读
    C<b class='flag-5'>语言</b>基础知识(5)--<b class='flag-5'>循环</b>语句

    C语言中for循环的用法和应用 C语言中for循环与while循环的区别

    C语言中的循环结构时,for循环是最常用的一种。它允许重复执行一段代码,直到满足特定条件为止。
    发表于 08-18 16:33 1639次阅读
    C<b class='flag-5'>语言</b>中for<b class='flag-5'>循环</b>的用法和应用 C<b class='flag-5'>语言</b>中for<b class='flag-5'>循环</b>与while<b class='flag-5'>循环</b>的区别

    C语言循环结构的使用方法

    详细介绍了C语言while循环结构、do-while循环结构、for循环结构、循环退出语句的语法和使用方法。
    发表于 11-02 11:26 615次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>循环</b>结构的使用方法

    入门——C语言循环控制#C语言

    C语言
    jf_49750429
    发布于 :2022年11月16日 15:37:52

    C语言“骚操作”之 C语言中的相对论!时间空间的相互转化#C语言

    C语言
    于振南的单片机世界
    发布于 :2023年03月20日 23:07:23

    C语言高效编程的几招,你会几招了?

    和经验做相关的阐述。第1招:空间时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有
    发表于 12-20 15:40

    在单片机C语言中怎么通过循环次数计算延迟函数的延迟时间

    在单片机C语言中怎么通过循环次数计算延迟函数的延迟时间? 首先你要知道一个指令周期是几秒 算法是1/(晶振频率除以12) 然后你要知道循环
    发表于 07-14 07:09

    C语言多层循环的方法有哪些

    C语言多层循环的几种方法
    发表于 07-14 08:29

    c语言预处理命令什么开头

    c语言预处理命令什么开头,目前我并没有windows软件编写经验,对C语言的应用也仅限于各种单片机的编程,所以对预处理的理解也只限于单片机
    发表于 07-20 07:00

    c语言for循环经典案例分享

    c语言for循环经典案例#includeint main(int argc,char*argv[]){int i=0;int sum=0;for(i=1;i
    发表于 07-20 06:13

    怎么实现c语言循环链表?

    怎么实现c语言循环链表?
    发表于 10-19 06:07

    c语言时间for延时,怎么算时间

    c语言时间 for延时,怎么算时间?for(i=;;)
    发表于 10-08 07:46

    C语言的3种循环结构分析

    C语言循环结构有for循环、while循环、do循环和goto循环。本文介绍前3种
    的头像 发表于 05-20 13:43 1w次阅读
    C<b class='flag-5'>语言</b>的3种<b class='flag-5'>循环</b>结构分析

    c语言在while中嵌套if循环

    C语言是一种广泛使用的面向过程编程语言,它提供了许多控制结构来帮助程序员实现复杂的逻辑和流程控制。其中,while循环和if语句是非常常见和重要的控制结构。本文将详细介绍C语言中在wh
    的头像 发表于 11-22 10:09 2497次阅读

    labview精确控制循环时间

    LabVIEW是一款图形化编程语言,广泛应用于实验室和工业控制领域。正因为其图形化的特点,使得其在控制循环时间上具有一定的挑战性。本文将详细介绍LabVIEW中如何精确控制循环
    的头像 发表于 01-04 16:34 1696次阅读