当前位置:  开发笔记 > 开发工具 > 正文

为什么GCC不优化结构?

如何解决《为什么GCC不优化结构?》经验,为你挑选了4个好方法。

系统要求某些基元与存储器内的某些点对齐(对于4的倍数的字节,对于2的倍数的字节的短路,等等).当然,这些可以被优化以浪费填充中的最小空间.

我的问题是GCC为什么不自动执行此操作?更明显的启发式(从最大尺寸要求到最小尺寸的订单变量)是否缺乏某种方式?一些代码是否依赖于其结构的物理排序(这是一个好主意)?

我只是问,因为GCC在很多方面都是超级优化的,但不是在这个方面,我认为必须有一些相对很酷的解释(我不知道).



1> 小智..:

gcc不会重新排序结构的元素,因为这会违反C标准.C99标准第6.7.2.1节规定:

在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址.


@ Evo510:我很困惑.要使用屏蔽,您还必须知道填充,这是语言无法保证的.所以,你不能使用面具.我错过了什么吗?
是的,但为什么这样定义?

2> Cody Brociou..:

结构经常用作二进制文件格式和网络协议的打包顺序的表示.如果这样做会破坏.此外,不同的编译器会以不同的方式优化事物,并且将代码从两者链接在一起是不可能的.这根本不可行.


你的第一点非常有效.但我认为你的第二个不是.无论如何,来自不同编译器的编译代码是不兼容的.
这与网络或文件结构无关.实际上,BMP结构的标题紧紧地包含着落在与编译器不同的非自然边界上的元素.

3> tzot..:

GCC比我们大多数人从我们的源代码生产机器代码更聪明; 然而,如果它比我们更聪明地重新安排我们的结构,我会颤抖,因为它的数据例如可以写入文件.与4个字符开始,然后的struct如果另一个系统中GCC决定,它应该重新安排结构成员上读取4个字节的整数将是无用的.



4> alex strange..:

gcc SVN确实有一个结构重组优化(-fipa-struct-reorg),但它需要整个程序分析,目前还不是很强大.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有