新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高效的C編程之:寄存器分配

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

        作者: 時間:2013-09-30 來源:網絡 收藏

        本文引用地址:http://www.104case.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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 正镶白旗| 通江县| 利辛县| 蒙自县| 阳春市| 昔阳县| 清丰县| 昭平县| 乐东| 拜城县| 宁夏| 金华市| 平和县| 裕民县| 项城市| 东明县| 宿迁市| 壶关县| 道真| 道孚县| 延寿县| 左权县| 平南县| 金平| 红桥区| 普安县| 镇雄县| 新安县| 民勤县| 石门县| 山西省| 龙门县| 塔河县| 高雄县| 吴川市| 崇礼县| 库伦旗| 南皮县| 库车县| 永胜县| 中牟县|