libstdc++的max_aligntt定义中的属性
attributes in the definition of max_align_t of libstdc++
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
类型被错误对齐。
相关文章:
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 如何在Qt C++中向自定义控件添加属性?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 我可以从样式表 (qss) 更改自定义动态属性吗?
- 基于对象的两个属性的自定义比较器会引发异常
- 如何在"数据链接属性"对话框中自定义"连接"选项卡?
- 无法使用自定义结构的属性
- 访问用户定义类型的数组的特定属性
- 我刚刚安装了Visual Studio,遇到了一些错误,特别是WindowsSDKDir属性未定义.可能找不到某些生成工
- 如何根据自定义操作中的属性集安装功能
- 如何在Boost Graph库中的Grid_graph的边缘添加自定义属性
- 如何在自定义操作DLL(MSI / Wix)中获取"INSTALLED"属性?
- FAT32和NTF中的自定义文件属性
- 如何从类中返回自定义数组项目并操纵其属性?C
- 如何在 PEGTL 的 c++ 中通过属性/标识符定义 unicode 范围
- 使用自定义的边缘属性 boost::adjacency_list 遍历边缘
- 精神 X3:本地定义的规则定义必须附加属性
- Javascript 函数作为从 c++ 定义的 QML 属性
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- 为什么没有CUDA __device__属性定义类头工作?(c++)