gpt4 book ai didi

c - 结构是否保证与 C 中的 sizeof(size_t) 对齐?

转载 作者:行者123 更新时间:2023-12-05 01:30:57 25 4
gpt4 key购买 nike

我有以下结构:

struct data {
char buffer[12];
bool flag;
}

当测试 data 结构的大小时,我意识到它是 16 字节,因为 bool 标志在填充中添加了 3 字节.所以我决定在使用 buffer 的最后一个字节作为标志的同时执行以下操作:

struct data {
char buffer[16];
}

这样我的 buffer 就免费地大了 3 字节,因为无论如何它都会在填充中丢失。

但是,我希望这个结构独立于平台,所以我查看了 cppreference 和 found the following (强调我的):

Every complete object type has a property called alignment requirement, which is an integer value of type size_t representing the number of bytes between successive addresses at which objects of this type can be allocated.

基于此,我写了以下内容:

struct data {
char buffer[12 + sizeof(size_t)];
}

它在我的设备上工作,但我只是想知道这是否能保证在所有平台上正确对齐并且不浪费任何字节?

编辑:我知道sizeof(size_t) 可能是8 字节,使我的结构20字节。但是,如果对齐方式是 8 字节,那么无论如何我的结构都是 20 字节。这就是为什么我想知道结构是如何对齐的。

最佳答案

struct 是否保证与 C 中的 sizeof(size_t) 对齐?

没有。


我怀疑以下将满足 OP 访问填充的目标。成员(member)顺序很重要。将最小的成员放在最后。 char 总是最小的。

struct data_ref {
bool flag;
char buffer[12];
};

#define PAD (sizeof(struct data_ref) - sizeof(char)*12 - sizeof(bool))

struct data {
bool flag;
char buffer[12 + PAD];
};

关于c - 结构是否保证与 C 中的 sizeof(size_t) 对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com