打印
[ARM入门]

嵌入式代码优化技巧--使用柔性数组

[复制链接]
946|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作 柔性数组 。

柔性数组的特点:

  • 结构体中柔性数组成员前面必须至少有一个其他成员。
  • sizeof返回的这种结构大小不包括柔性数组的内存。
  • 包含柔性数组成员的结构用malloc()函数进行内存的动态分配。

在C99标准环境中,使用柔性数组:

typedef struct _protocol_format
{
    uint16_t head;   
    uint8_t id;
    uint8_t type;
    uint8_t length;
    uint8_t value[];
}protocol_format_t;

优于使用指针:

typedef struct _protocol_format
{
    uint16_t head;   
    uint8_t id;
    uint8_t type;
    uint8_t length;
    uint8_t *value;
}protocol_format_t;
  • 柔性数组的方式结构体占用较指针的方式少。

  • 柔性数组的方式相对与指针的方式更为简洁,给结构体申请空间的同时也给柔性数组申请空间,柔性数组的方式只需要申请一次空间,是一块连续内存,连续的内存有益于提高访问速度;而指针的方式,除了给结构体申请空间之外,还得给结构体里的指针成员申请空间。

  • 使用指针的方式写代码会比柔性数组的方式会繁琐一些,特别地,如果在释放内存的时候把顺序弄反了,则结构体里的指针成员所指向的内存就释放不掉,会造成内存泄露。





使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

483

主题

3815

帖子

47

粉丝