新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 高效的C編程之:寄存器分配

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

作者: 時間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/257018.htm

比較下面兩個完成同樣功能的函數(shù),分析全局的操作對程序性能的影響。

intf(void);

intg(void);

interrs;

voidtest1(void)

{

errs+=f();

errs+=g();

}

voidtest2(void)

{

intlocalerrs=errs;

localerrs+=f();

localerrs+=g();

errs=localerrs;

}

編譯結(jié)果如下。

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}

從編譯的結(jié)果中可以看出,test1中每次對全局errs的訪問都會使用耗時的Load/Store指令;而test2只使用了一次內(nèi)存訪問指令。這對提高程序的整體性能有很大幫助。

3.指針鏈

指針鏈(PointerChains)常被用來訪問結(jié)構(gòu)體內(nèi)部。下面的例子顯示了一個典型的指針鏈的使用。

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;

}

經(jīng)過改寫的代碼,減少了內(nèi)存訪問次數(shù),提高程序的執(zhí)行效率,另外也可以在object結(jié)構(gòu)體中增加一個point3域,專門作為指向p->pos的指針。

塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理

上一頁 1 2 3 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉