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

    文章

    7601

    浏览量

    136237
  • 程序
    +关注

    关注

    116

    文章

    3777

    浏览量

    80857
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49055
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    C语言for循环的用法和注意事项

    C 语言是一种广泛使用的编程语言,它具有简洁、高效、灵活的特点。C 语言中有很多控制流程的语句,其中 for
    的头像 发表于 11-20 18:27 2280次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>for<b class='flag-5'>循环</b>的用法和注意事项

    C语言入门教程-if语句和while循环

    if语句和while循环 C语言中,if语句和while循环都会用到布尔表达式。下面是一个使用if语句的简单例子: #include
    发表于 07-29 10:48 8529次阅读

    C++语言基础讲解视频do while循环语句

    C++语言基础讲解视频do while循环语句
    发表于 01-14 15:32 5次下载

    C++语言基础讲解视频while循环语句

    C++语言基础讲解视频while循环语句,喜欢的朋友可以下载来学习。
    发表于 01-14 15:31 3次下载

    C语言教程之循环显示随机数问题

    C语言教程之循环显示随机数问题,很好的C语言资料,快来学习吧。
    发表于 04-25 15:03 0次下载

    C语言教程之当前时间转换

    C语言教程之当前时间转换,很好的C语言资料,快来学习吧。
    发表于 04-25 16:09 0次下载

    多变循环彩灯C语言+Proteus软件仿真参考程序

    此软件提供多变循环彩灯C语言+proteus软件仿真参考程序。
    发表于 08-30 16:23 21次下载
    多变<b class='flag-5'>循环</b>彩灯<b class='flag-5'>C</b><b class='flag-5'>语言</b>+Proteus软件仿真参考程序

    C语言教程之使用循环结构设计C语言程序的资料说明

    本文档详细介绍的是C语言教程之使用循环结构设计C语言程序的资料说明主要内容包括了:1.while循环
    发表于 02-15 11:27 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>教程之使用<b class='flag-5'>循环</b>结构设计<b class='flag-5'>C</b><b class='flag-5'>语言</b>程序的资料说明

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

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

    C语言中的数组空间动态开辟

    C语言中的数组空间动态开辟 在C语言中,必不可少的需要使用到数组,通常为了动态的开辟数组空间,可
    的头像 发表于 02-10 12:42 2084次阅读

    C语言循环与分支-2

    而在c语言中我们经常会需要重复地进行一些指令,但是不断的编辑重复代码不仅很繁琐,还容易出现bug,因此循环语句的使用就非常有必要。今天要介绍的就是循环语句相关的知识。
    的头像 发表于 02-21 15:35 673次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>的<b class='flag-5'>循环</b>与分支-2

    c语言在while中嵌套if循环

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