我有以下结构体:
struct data {
char buffer[12];
bool flag;
}
当测试 data
结构的大小时,我意识到它是 16
字节,因为布尔标志添加了 3
个字节的填充。因此,我决定在使用 buffer
的最后一个字节作为标志时执行以下操作:
struct data {
char buffer[16];
}
这样我的buffer
会多出3
个字节的免费空间因为它本来就会在填充中被浪费。
然而,我希望这个结构是与平台无关的,因此我查看了cppreference,找到以下内容(强调是我的):
每种完整对象类型都有一个名为对齐要求的属性,它是一个size_t类型的整数值,表示此类型的对象可以分配的连续地址之间的字节数。
基于此,我编写了以下内容:
struct data {
char buffer[12 + sizeof(size_t)];
}
它在我的设备上运行良好,但我只是想知道这是否保证在所有平台上正确对齐并且不浪费任何字节?
编辑:我知道sizeof(size_t)可能是8个字节,使我的结构体为20个字节。但是,如果对齐方式是8个字节,则无论如何我的结构体都将是20个字节。这就是为什么我想知道结构体是如何对齐的。
sizeof(size_t)
实际上可能是八个字节,这将使你的结构体大小为20个字节。 - Some programmer dudestruct data { char buffer[15]; char flag; }
或者类似的方式呢? - Steve Summit