新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高效的C編程之: 變量類型

        高效的C編程之: 變量類型

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

        本文引用地址:http://www.104case.com/article/257017.htm

        14.8

        C支持基本的數據類型:char、short、int、longlong、float和double。表14.2說明了對C語言所使用的數據類型的映射。

        表14.2 C數據類型映射

        C數據類型

        表示的意義

        char

        無符號8位字節數據

        short

        有符號16位半字數據

        int

        有符號32位字數據

        long

        有符號32位字數據

        longlong

        有符號64位雙字數據

        指令集中,無論是數據處理指令還是數據加載/存儲指令,處理的數據類型不同,指令的執行效率是不一樣的。本章將詳細討論,如何在程序中為變量分配合理的數據類型,來提高代碼的執行效率。

        14.8.1局部變量

        屬于RISC的體系結構,所有大多數的數據處理都是在32位的寄存器中進行的。基于這個原因,局部變量應盡可能使用32位數據類型int或long。

        注意

        一些情況下不得不使用char或short類型,例如要使用char或short類型的數據溢出指令時歸零特性時,如模運算255+1=0,就要使用char類型。

        為了說明局部的影響,先來看一個簡單的例子。

        charcharinc(chara)

        {

        returna+1;

        }

        編譯出的結果如下。

        charinc

        ADDa1,a1,#1

        ANDa1,a1,#ff

        MOVpc,lr

        再把上面的程序段中變量a聲明位int型,代碼如下。

        intwordinc(inta)

        {

        returna+1;

        }

        比較一下輸出結果。

        wordinc

        ADDa1,a1,#1

        MOVpc,lr

        分析上面的兩段代碼不難發現,當把變量聲明為char型時,編譯器增加了額外的ADD指令來保證其范圍在0~255之間。

        14.8.2有符號數和無符號數

        上一節討論了對于局部變量和函數參數,使用int型比使用char或short型要好。本節將對程序中的有符號整數(signedint)和無符號整數(unsignedint)的執行效率進行分析比較。

        首先來看上一節的例子,如果將變量指定為有符號的半字類型(編譯器默認short型為有符號類型),程序的源代碼如下。

        shortshortinc(shorta)

        {

        returna+1;

        }

        編譯后的結果如下。

        shortinc

        ADDa1,a1,#1

        MOVa1,a1,LSL#16

        MOVa1,a1,ASR#16

        MOVpc,lr

        分析發現,該結果比使用int型的變量多增加了兩條指令(LSL和ASR)。編譯器先將變量左移16位,然后右移16位,以實現一個16位符號擴展。右移是符號位擴展移位,它復制了符號位來填充高16位。

        通常情況下,如果程序中只有加法、減法和乘法,那么有符號和無符號數的執行效率相差不大。但是,如果有了除法,情況就不一樣了。詳細內容可參加除法運算優化一節。

        c語言相關文章:c語言教程



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石屏县| 大竹县| 延吉市| 陕西省| 白城市| 略阳县| 新野县| 涞源县| 固镇县| 汉中市| 承德市| 福鼎市| 桓台县| 宁陕县| 平利县| 邯郸县| 邢台市| 虎林市| 瑞昌市| 库伦旗| 南皮县| 客服| 西藏| 志丹县| 保康县| 淮安市| 南投市| 景东| 九龙县| 泰和县| 阿巴嘎旗| 什邡市| 太湖县| 江口县| 太和县| 巴东县| 台南县| 铜山县| 安丘市| 中方县| 措美县|