假设我有一个大型结构,其中包括其他结构等。gcc -os
或任何其他 gcc 优化开关会改变它在内存中的存储方式吗? IE。它会压缩结构以挤出一些额外的空间吗?
谢谢,
最佳答案
不,为了在 gcc
中更改结构的 native 平台对齐方式,您必须显式使用 __attribute__((packed))
或 __attribute__( (align X))
编译器指令,或其他专门指示编译器更改数据结构的 native 平台对齐方式的 gcc
命令行开关。
另外,用混合数据类型打包一个结构,这样所有的数据成员可能不会在内存中正确的字边界上对齐,实际上访问数据成员时会慢运行时,而不是更快。这是因为在访问数据成员之前,编译器必须将结构解压缩回平台的 native 对齐方式。
关于c - gcc优化对结构大小的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635951/