gpt4 book ai didi

c++ - 对齐特定 pragma packed struct 成员的内存地址?

转载 作者:太空狗 更新时间:2023-10-29 21:42:20 24 4
gpt4 key购买 nike

我有一个结构,其中的数据成员具有不同长度的类型(有些是整数,有些是单词,有些只是单个字节)。该结构已打包(使用#pragma pack(1))。

我的问题是:是否可以让结构的数据成员内存地址之一在内存中对齐(例如,地址可以被 16 整除)?

我知道可以使用 attribute 对齐整个结构(或者换句话说,它的第一个成员)。我想知道是否可以对齐特定成员而不仅仅是第一个成员。

基本上我需要打包结构(每个成员都在前一个成员之后没有填充)并且我需要其中一个成员(而不是第一个成员)的地址可以被 16 整除。

最佳答案

似乎没有任何可能将结构与偏移量对齐。您必须自己创建偏移量(填充)。

typedef struct __attribute__((packed)) special_align {
char misc[3];
int align_me;
};

typedef struct __attribute__((packed, aligned(16))) pad_container {
char padding[13]; //16-3
struct special_align data;
};

当然访问结构会变得更麻烦。如果您不想手动计算需要多少填充,可以使用 offsetof() 宏。在示例中,offsetof(struct special_align,align_me) 将返回 3,即从对齐大小中减去。 (当然如果offset大于align,就必须使用相应的pad size multiplier。`

 pad_size = (sizeof(special_align) * align_size - offsetof(special_align,align_me)) % align_size;

关于c++ - 对齐特定 pragma packed struct 成员的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625790/

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