• memory alignment


    memory-alignment

    1 Conclusion

    Make sure memory alignment by 4 bytes. Especially for Embedded development.

    2 Test Program

    #include <stdio.h>
    
    // not alignment for 4B
    
    int main()
    {
        int i = 0;
        unsigned char buf[8];
    
        for (i = 0; i < 8; i++) {
            buf[i] = i;
            printf("buf[%d] = 0x%x
    ", i, buf[i]);
        }
    
        for (i = 0; i < 5; i++)
            printf("*(int *)&buf[%d] = 0x%x
    ", i, *(int *)&buf[i]);
    
        return 0;
    }
    

    3 Memory Alignment in ubuntu14.04 i386

     

    3.1 kernel version

    3.13.0-62-generic

    3.2 result

    buf[0] = 0x0
    buf[1] = 0x1
    buf[2] = 0x2
    buf[3] = 0x3
    buf[4] = 0x4
    buf[5] = 0x5
    buf[6] = 0x6
    buf[7] = 0x7
    *(int *)&buf[0] = 0x3020100
    *(int *)&buf[1] = 0x4030201
    *(int *)&buf[2] = 0x5040302
    *(int *)&buf[3] = 0x6050403
    *(int *)&buf[4] = 0x7060504
    

    4 Memory Alignment in Arm DM368

     

    4.1 kernel version

    2.6.37IPNCDM3685.1.0R001

    4.2 result

    buf[0] = 0x0
    buf[1] = 0x1
    buf[2] = 0x2
    buf[3] = 0x3
    buf[4] = 0x4
    buf[5] = 0x5
    buf[6] = 0x6
    buf[7] = 0x7
    *(int *)&buf[0] = 0x3020100
    *(int *)&buf[1] = 0x30201
    *(int *)&buf[2] = 0x1000302
    *(int *)&buf[3] = 0x2010003
    *(int *)&buf[4] = 0x7060504
    

    we can see when we reference 4B content from &buf1, &buf2 and &buf3, we get the wrong value.

  • 相关阅读:
    css 左右两栏 左边固定右边自适应
    Oracle 执行长SQL
    Oracle 游标基础
    ERROR 000464: Cannot get exclusive schema lock. Either being edited or in use by another application
    MyEclipse 批量更新编码集
    使用Windows服务发布WCF服务【转载】
    JavaScript的陷阱【转载】
    JS图片切换带超链接
    新正则表达式
    asp.net垃圾代码之asp.net去掉垃圾代码,优化aspx页面性能的方法
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4742513.html
Copyright © 2020-2023  润新知