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行

  • 相关阅读:
    [转自大神]js拖拽小总结
    双飞翼布局
    圣杯布局
    页面伸缩布局实例
    css动画
    html的简单笔记01
    沙扬娜拉一首——赠日本女郎(徐志摩)
    滑动门功能
    边框圆角练习--跳动的心
    边框圆角
  • 原文地址:https://www.cnblogs.com/ceblog/p/1772376.html
Copyright © 2011-2022 走看看