zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    CS224d lecture 16札记
    CS224d lecture 15札记
    CS224d lecture 14札记
    CS224d lecture 13札记
    将博客搬至CSDN
    三张图理解JavaScript原型链
    三道题理解软件流水
    网络安全密码学课程笔记
    “wuliao“(无聊)聊天软件
    大二小学期C#资产管理大作业小记
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4742513.html
Copyright © 2011-2022 走看看