减少C中结构的RAM消耗

时间:2018-06-20 10:59:10

标签: c embedded

我目前正在为微控制器开发固件。我在代码中使用了以下结构:

struct sub
{
uint16_t a1;
uint16_t a2;
uint16_t a3;
uint16_t a4;
uint16_t a5;
uint16_t a6;
uint16_t a7;
uint16_t a8;
uint8_t a9;
uint8_t a10;
};

struct state
{
struct sub sub1;
struct sub sub2;
struct sub sub3;
struct sub sub4;
};


typedef struct
{
uint16_t c1;
uint16_t c2;
uint16_t c3;
uint16_t c4;
struct state state1;
struct state state2;
struct state state3;
struct state state4;
struct state state5;
struct state state6;
struct state state7;
struct state state8;
} status

因此,层次结构是状态,状态和子级。 你们中是否有人认为可以减少此结构所需的RAM大小?目前,如果变量未存储在结构中,则大约需要所有变量分别需要的空间的两倍。

1 个答案:

答案 0 :(得分:1)

您可以为结构使用__attribute__((packed)),这将更改填充并减少结构所需的RAM

编辑:

这并非对所有编译器都有效,但是您要记住的想法是padding,您可以通过按变量类型对变量进行排序来自然地做到这一点。

例如:

struct s_structure1 {
    int a;
    int b;
    char c;
    char d;
    float e;
}

struct s_structure2 {
    int a;
    char c;
    int b;
    float e;
    char d;
}

s_structure1的大小(以字节为单位):16

s_structure2的大小(以字节为单位):20