有没有什么办法可以强制使用GNUism对结构的特定元素进行对齐?如何对齐结构的元素?
1
A
回答
3
尝试6.54.8 Structure-Packing Pragmas
对于与Microsoft Windows编译器的兼容性,GCC支撑一组#pragma指令,其改变 结构的成员的 最大对齐(大于零宽度 位域除外) ,随后定义了工会和类别 。下面的n值 总是要求为2的幂,并指定新的 以字节为单位的对齐。
#pragma pack(n)
只是设置新的比对。#pragma pack()
设置对齐到一个在 效果编译时开始(见 还命令行选项-fpack-struct[=<n>]
看到代码生成选项)。#pragma pack(push[,n])
推动 内部堆栈上的当前对齐设置,然后可选地 设置新对齐。#pragma pack(pop)
将对齐设置恢复为保存在内部堆栈顶部的 (并且 删除该堆栈条目)。请注意,#pragma pack([n])
不会影响此内部堆栈;因此它是 可能有#pragma pack(push)
其次是多个#pragma pack(n)
实例和由单个#pragma pack(pop)
最终确定。一些目标,例如, i386和powerpc, 支持
ms_struct
#pragma
其中 奠定了结构为记录的__attribute__ ((ms_struct))
。
#pragma ms_struct on
打开声明结构的布局。#pragma ms_struct off
关闭已声明结构的布局。#pragma ms_struct reset
回到默认布局。
3
http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Type-Attributes.html
aligned (alignment)
This attribute specifies a minimum alignment (in bytes) for variables of the specified type. > For example, the declarations:
struct S { short f[3]; } __attribute__ ((aligned (8)));
typedef int more_aligned_int __attribute__ ((aligned (8)));
0
您可以尝试在结构排列的属性:
__attribute__((__aligned__(8)))
0
除了列出的东西,你也可能有兴趣在属性( (packed)),它试图在没有任何填充的情况下布置数据 - 基本上对齐设置为1. Th在描述填充字节应该消失的文件或网络协议中的数据布局时非常有用。
相关问题
- 1. 结构对齐
- 2. 对齐元素
- 3. 用于确定C/C++结构中元素对齐的算法
- 4. 如何对齐的元素中的TableRow
- 5. 如何将元素与另一个与flex对齐的元素对齐?
- 6. 如何对齐td中的元素?
- 7. 如何对齐界面构建器中的视图元素?
- 8. C结构对齐
- 9. 左对齐元素宽度的对齐元素
- 10. 如何对齐div中的左元素与居中对齐
- 11. CSS对齐元素
- 12. GridLayout - 对齐元素
- 13. 对齐div元素
- 14. Bootstrap元素对齐
- 15. 如何在结构内部对齐__m256d?
- 16. 对齐列表元素中的元素
- 17. 如何居中对齐浮动元素?
- 18. 如何对齐井内元素?
- 19. 如何保持页脚元素对齐?
- 20. 如何水平对齐元素?
- 21. 如何左对齐页脚元素
- 22. 如何对齐重叠元素
- 23. 如何使列表元素对齐?
- 24. 如何垂直对齐元素HTML
- 25. 对齐标签的元素
- 26. 对齐表中的元素
- 27. 对齐元素到另一个元素
- 28. 访问未对齐的结构构件
- 29. 数据结构对齐
- 30. 与PyOpenCL结构对齐