gcc优化对结构尺寸的影响

时间:2011-10-03 13:52:50

标签: c optimization gcc

假设我有一个大结构,包括其他结构等。gcc -os或任何其他gcc优化开关会改变它存储在内存中的方式吗?即它会打包结构以挤出一些额外的空间吗?

感谢,

3 个答案:

答案 0 :(得分:4)

不,为了更改gcc中结构的本机平台对齐,您必须显式使用__attribute__((packed))__attribute__((align X))编译器指令或其他gcc命令-line开关,专门指导编译器更改数据结构的本机平台对齐。

此外,打包具有混合数据类型的结构,以便所有数据成员可能无法在内存中的正确字边界上对齐,实际上较慢用于访问数据成员运行时,而不是更快。这是因为在访问数据成员之前,编译器必须将结构解包回平台的本地对齐。

答案 1 :(得分:3)

不,这不应该发生 - 只要您对所有代码模块具有相同的对齐和打包选项,那么即使使用不同的优化级别进行编译,它们也应该正常工作,

答案 2 :(得分:0)

事实上,我可以看到对齐结构(通过填充它们)可以导致更短的代码(没有跨界字寻址 - >更少的加载/存储)

-Os 优化二进制大小(即最常称为代码大小)内存压缩