新闻中心

EEPW首页>嵌入式系统>设计应用> 高效的C编程之:寄存器分配

高效的C编程之:寄存器分配

作者: 时间:2013-09-30 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257018.htm

比较下面两个完成同样功能的函数,分析全局的操作对程序性能的影响。

intf(void);

intg(void);

interrs;

voidtest1(void)

{

errs+=f();

errs+=g();

}

voidtest2(void)

{

intlocalerrs=errs;

localerrs+=f();

localerrs+=g();

errs=localerrs;

}

编译结果如下。

test1

STMDBsp!,{v1,lr}

BLf

LDRv1,[pc,#L00002c-.-8]

LDRa2,[v1,#0]

ADDa1,a1,a2

STRa1,[v1,#0]

BLg

LDRa2,[v1,#0]

ADDa1,a1,a2

STRa1,[v1,#0]

LDMIAsp!,{v1,pc}

L00002c

DCD|x$dataseg|

test2

STMDBsp!,{v1,v2,lr}

LDRv1,[pc,#L00002c-.-8]

LDRv2,[v1,#0]

BLf

ADDv2,a1,v2

BLg

ADDa1,a1,v2

STRa1,[v1,#0]

LDMIAsp!,{v1,v2,pc}

从编译的结果中可以看出,test1中每次对全局errs的访问都会使用耗时的Load/Store指令;而test2只使用了一次内存访问指令。这对提高程序的整体性能有很大帮助。

3.指针链

指针链(PointerChains)常被用来访问结构体内部。下面的例子显示了一个典型的指针链的使用。

typedefstruct{intx,y,z;}Point3;

typedefstruct{Point3*pos,*direction;}Object;

voidInitPos1(Object*p)

{

p->pos->x=0;

p->pos->y=0;

p->pos->z=0;

}

上面的代码每次使用“p->pos”时都会对变量重新取值。为了提高代码效率,将程序改写如下。

voidInitPos2(Object*p)

{

Point3*pos=p->pos;

pos->x=0;

pos->y=0;

pos->z=0;

}

经过改写的代码,减少了内存访问次数,提高程序的执行效率,另外也可以在object结构体中增加一个point3域,专门作为指向p->pos的指针。

尘埃粒子计数器相关文章:尘埃粒子计数器原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭