假设我有一个大结构,包括其他结构等。gcc -os
或任何其他gcc优化开关会改变它存储在内存中的方式吗?即它会打包结构以挤出一些额外的空间吗?
感谢,
答案 0 :(得分:4)
不,为了更改gcc
中结构的本机平台对齐,您必须显式使用__attribute__((packed))
或__attribute__((align X))
编译器指令或其他gcc
命令-line开关,专门指导编译器更改数据结构的本机平台对齐。
此外,打包具有混合数据类型的结构,以便所有数据成员可能无法在内存中的正确字边界上对齐,实际上较慢用于访问数据成员运行时,而不是更快。这是因为在访问数据成员之前,编译器必须将结构解包回平台的本地对齐。
答案 1 :(得分:3)
不,这不应该发生 - 只要您对所有代码模块具有相同的对齐和打包选项,那么即使使用不同的优化级别进行编译,它们也应该正常工作,
答案 2 :(得分:0)
事实上,我可以看到对齐结构(通过填充它们)可以导致更短的代码(没有跨界字寻址 - >更少的加载/存储)
-Os
优化二进制大小(即最常称为代码大小)不内存压缩