在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            本文引用地址:http://www.biyoush.com/article/257018.htm

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

            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中每次對(duì)全局errs的訪問都會(huì)使用耗時(shí)的Load/Store指令;而test2只使用了一次內(nèi)存訪問指令。這對(duì)提高程序的整體性能有很大幫助。

            3.指針鏈

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

            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”時(shí)都會(huì)對(duì)變量重新取值。為了提高代碼效率,將程序改寫如下。

            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)體中增加一個(gè)point3域,專門作為指向p->pos的指針。

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

            上一頁 1 2 3 下一頁

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉