新聞中心

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

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

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

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

        14.7

        一項很重要的優化功能就是對寄存器的分配。與分配在寄存器中的相比,分配到內存的訪問要慢得多。所以如何將盡可能多的分配到寄存器,是編程時應該重點考慮的問題。

        注意

        當使用-g或-dubug選項編譯程序時,為了確保調試信息的完整性,的效率比不使用-g或-dubug選項低很多。

        14.7.1變量

        一般情況下,會對C函數中的每一個局部變量分配一個寄存器。如果多個局部變量不會交迭使用,那么會對它們分配同一個寄存器。當局部變量多于可用的寄存器時,編譯器會把多余的變量存儲到堆棧。這些被寫入堆棧需要訪問存儲器的變量被稱為溢出(Spilled)變量。

        為了提高程序的執行效率:

        ·使溢出變量的數量最少;

        ·確保最重要的和經常用到的變量被分配在寄存器中。

        可以被分配到寄存器的變量包括:

        ·程序中的局部變量;

        ·調用子程序時傳遞的參數;

        ·與地址無關變量。

        另外,在一些特定條件下,結構體中的域也可以被分配到寄存器中。

        表14.1顯示了當C編譯器采用-Thumb過程調用標準時,內部寄存器的編號、名字和分配方法。

        表14.1 C編譯器寄存器用法

        寄存器編號

        可選寄存器名

        特殊寄存器名

        寄存器用法

        r0

        a1

        函數調用時的參數寄存器,用來存放前4個函數參數和存放返回值。在函數內如果將這些寄存器用作其他用途,將破壞其值。

        r1

        a2

        r2

        a3

        r3

        a4

        r4

        v1

        通用變量寄存器

        r5

        v2

        r6

        v3

        r7

        v4

        r8

        v5

        r9

        v6或SB或TR

        平臺寄存器,不同的平臺對該寄存器的定義不同

        r10

        v7

        通用變量寄存器。在使用堆棧邊界檢測的情況下,r10保存堆棧邊界的地址

        r11

        v8

        通用變量寄存器。

        r12

        IP

        臨時過渡寄存器,函數調用時會破壞其中的值

        r13

        SP

        堆棧指針

        r14

        LR

        鏈接寄存器

        r15

        PC

        程序計數器

        從表14.1可以看出,編譯器可以分配14個變量到寄存器而不會發生溢出。但有些寄存器編譯器會有特殊用途(如r12),所以在編寫程序時應盡量限制變量的數目,使函數內部最多使用12個寄存器。

        注意

        在C語言中,可以使用關鍵詞register給指定變量分配專用寄存器。但不同的編譯器對該關鍵詞的處理可能不同,使用時要查閱相關手冊。

        塵埃粒子計數器相關文章:塵埃粒子計數器原理

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 汉阴县| 郑州市| 沙洋县| 通山县| 肥西县| 黎城县| 精河县| 那坡县| 固原市| 西丰县| 仁寿县| 时尚| 深州市| 沾化县| 灵川县| 龙州县| 淮滨县| 林州市| 伊金霍洛旗| 迁安市| 岚皋县| 峨眉山市| 宜都市| 建昌县| 陇南市| 南平市| 云和县| 新干县| 江永县| 海宁市| 汽车| 浦县| 刚察县| 太仆寺旗| 正安县| 沧州市| 肇东市| 揭阳市| 白朗县| 泾川县| 华亭县|