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.

  • 相关阅读:
    【语言处理与Python】6.3评估
    win10同时安装 office2016和visio2016
    如何学好C语言(转)
    数据库索引
    Redis系列(二)如何接受客户端请求并调用处理函数
    Redis系列(三)事件处理细节分析及epoll介绍
    linux下查看某一个程序所使用的内存方法总结
    c++ 二级指针详解&&hiredis api
    C风格字符串
    twemproxy简介
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4742513.html
Copyright © 2011-2022 走看看