• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32中怎么才能做到内存对齐

Kylo 2018-11-18 浏览量:1761
需要用的什么函数才能这样操作
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 内存对齐是由编译器完成的。所以不存在怎么做到内存对齐。

    但程序员必须理解内存对齐,否则可能会遇到无法预料的问题。

    比如,BMP文件头部有14个字节用描述图片,为此定义了下面的结构体

    typedef struct
    {
        u16  bfType ;     //文件标志.只对'BM'用来识别BMP位图类型
        u32  bfSize ;   //文件大小占四个字节
        u16  bfReserved1 ;//保留
        u16  bfReserved2 ;//保留
        u32  bfOffBits ;  //从文件开始到位图数据(bitmap data)开始之间的的偏移量
    }BITMAPFILEHEADER ;

    如果忽视了内存对齐,直接从BMP文件头部连续读17个字节到结构体里。可能正常,也可能出错。

    当编译器采用16位对齐时,是正常的。采用32位对齐时,在bfType和bfSize之间会插入两个字节的空间,导致读入的内容错位。


    理解了内存对齐后,就知道需要避免这种情况。比如加个关键词,通知编译器不要对齐

    typedef __packed struct
    {
        u16  bfType ;     //文件标志.只对'BM'用来识别BMP位图类型
        u32  bfSize ;   //文件大小占四个字节
        u16  bfReserved1 ;//保留
        u16  bfReserved2 ;//保留
        u32  bfOffBits ;  //从文件开始到位图数据(bitmap data)开始之间的的偏移量
    }BITMAPFILEHEADER ;

    • 发布于 2018-11-18
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 可以参考https://www.cnblogs.com/King-Gentleman/p/5940480.html
    • 发布于2018-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 把内存指针对其就好,不要什么函数
    • 发布于2018-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 内存对齐可以用指向内存的指针实现,比方说你要存一个8位的数据 一个16位的数据 一个32位的数据各一个,stm32的内存是32位格式的,那么这三个数据都占一个内存单元,不足32位的数据,高位用0代替。

    • 发布于2018-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 默认就是内存对齐的,这些编译器去实现
    • 发布于2018-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 默认情况下就是开启了内存对齐的功能
    • 发布于2018-12-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 这里是要系统的支持的,系统在配置时会自动进行对齐的
    • 发布于2018-12-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 内存对齐是不需要用户去处理的,通常就是对齐的方式
    • 发布于2018-12-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般都是不需要软件去对齐的,默认就是自动对齐内存的
    • 发布于2018-12-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32中怎么才能做到内存对齐