阡陌 发表于 2024-1-13 00:20:08

结构体内存对齐规则



规则 1:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为 0 计算)。

规则 2:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。

```c
struct route_entry {
        uint16_t addr;
        uint32_t teAddr;
        uint8_t relayNum;
        uint16_t relay;
        uint8_t age;
};

struct route_table {
    uint8_t count;
    struct route_entry entry;
    uint16_t crc;
};

sizeof(struct route_entry) == 24
sizeof(struct route_table) == 56

```


页: [1]
查看完整版本: 结构体内存对齐规则