新聞中心

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

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

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

        本文引用地址:http://www.104case.com/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)閉
        主站蜘蛛池模板: 苍溪县| 安西县| 永顺县| 新巴尔虎左旗| 泸西县| 广灵县| 小金县| 伊通| 阳春市| 介休市| 辽宁省| 乐昌市| 盐津县| 丹凤县| 西畴县| 布拖县| 南木林县| 沿河| 澳门| 潜江市| 和田县| 客服| 和平区| 通州市| 宁强县| 鹤山市| 安化县| 武城县| 虎林市| 玛沁县| 安仁县| 额济纳旗| 阿坝县| 广饶县| 玉溪市| 介休市| 仙游县| 文登市| 兴文县| 剑川县| 永善县|