gpt4 book ai didi

c++ - libstdc++ 的 max_align_t 定义中的属性

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

max_align_t在libstdc++中定义如下:

typedef struct {
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;

这些属性不是多余的吗?没有这些属性我得到了相同的结果:

typedef struct {
long long __max_align_ll;
long double __max_align_ld;
} max_align_t;

问题是“指定这些属性是否有任何原因?”。

最佳答案

如果类型作为另一个结构的成员包含并使用 -fpack-struct 或打包 #pragma 编译,则属性会强制类型正确对齐

例如

typedef struct {
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;

typedef struct {
long long __max_align_ll;
long double __max_align_ld;
} max_align2_t;

struct A {
char c;
max_align_t ma;
};

struct A2 {
char c;
max_align2_t ma;
};

static_assert( sizeof(A) == sizeof(A2), "" );

使用 -fpack-struct 断言失败,表明属性防止 max_align_t 类型被错误对齐。

关于c++ - libstdc++ 的 max_align_t 定义中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115772/

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