zoukankan      html  css  js  c++  java
  • 书写高效的C代码

    驱动程序是系统很重要的部件,代码效率直接影响着系统的效率,因而书写高效的代码至关重要.

    1.代码中量不要使用位操作的结构体,而直接使用位操作,我写了如下的测试代码:

    typedef union Test_Reg
    {
    UINT32 value;
    struct
    {
    unsigned a : 5;
    unsigned reserved1 : 3;
    unsigned b : 4;
    unsigned reserved2 : 4;
    unsigned c : 8;
    unsigned reserved3 : 8;
    };
    } TestReg;

    static TestReg test_st;
    static DWORD g_dwTest;

    void test_function( int a, int b, int c )
    {
    test_st.dayOfMonth=a;
    test_st.month=b;
    test_st.year=c;
    }

    void test_ok( int a , int b , int c )
    {
    g_dwTest= (a)|(b<<8)|(c<<16);

    }

    其生成的汇编代码如下:
    test_function
    {

    stmdb sp!, {r4, r5, lr}
    mov r5, r2


    : test_st.dayOfMonth=a;
    : test_st.month=b;

    ldr r4, [pc, #0x2C]
    mov lr, #0
    sub lr, lr, #0xF2, 28
    ldr r3, [r4]
    and r1, r1, #0xF
    and r2, r0, #0x1F
    and r3, r3, lr
    orr r3, r3, r1, lsl #8
    orr r3, r3, r2
    str r3, [r4]

    : test_st.year=c;

    strb r5, [r4, #2]

    }

    ldmia sp!, {r4, r5, lr}
    bx lr


    ENDP


    test_ok

    {


    str lr, [sp, #-4]!
    : g_dwTest= (a)|(b<<8)|(c<<16);

    ldr lr, [pc, #0x10]
    orr r3, r1, r2, lsl #8
    orr r3, r0, r3, lsl #8
    str r3, [lr]
    }

    ldr lr, [sp], #4
    bx lr

    ENDP


    可见前者的效率明显低,效率只有后者的1/3.
    后者使用了3行代码,而前者用了12行

  • 相关阅读:
    小毛驴基本语法
    文本数据IO操作--字符流
    基本IO操作--字节流
    文件指针操作
    文件操作——RandomAccessFile
    Java文件操作——File
    前端修炼-javascript关键字之prototype
    Redux介绍及基本应用
    IOS应用程序生命周期
    EF 只更新部分字段
  • 原文地址:https://www.cnblogs.com/ceblog/p/1772376.html
Copyright © 2011-2022 走看看