灵活的数组成员是否会增加结构的大小?

SKi*_*SKi 8 c struct sizeof

我有以下类型的代码:

typedef struct
{    
    u32 count;
    u16 list[];   
} message_t;
...

message_t* msg = (message_t*)buffer;  
msg->count = 2;
msg->list[0] = 123;
msg->list[1] = 456;

size_t total_size = sizeof(*msg) + sizeof(msg->list[0]) * msg->count;  

send_msg( msg, total_size ); 
Run Code Online (Sandbox Code Playgroud)

有问题的线是sizeofs的线.我不确定这是计算所需空间的正确方法.是否sizeof(*msg)包含有关该list成员的内容?

我可以用我的编译器测试它,但是在这种情况下每个编译器的工作方式是否相似?

Gra*_*and 11

这是标准所说的:

作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型; 这被称为灵活的阵列成员.在大多数情况下,将忽略灵活数组成员.特别地,结构的尺寸好像省略了柔性阵列构件,除了它可以具有比省略意味着更多的拖尾填充.

  • @ User1:假设一个结构有五个`char`字段和一个`int []`,在一个'int`需要四字节对齐的平台上.没有灵活成员,结构的大小将是五个字节,不需要对齐; 使用它,结构将是八个字节,必须在四字节边界上对齐. (6认同)