我一直在开发一个相当大的性能关键代码库,在这里使用最新版本的gcc进行编译会发出很多关于类型惩罚的警告,导致我使用-fno-strict-aliasing
进行编译。我不相信这里有任何性能损失,无论如何都可以避免。但我确实认为,对于相同类型的别名指针可能存在更为重要的问题。
有没有办法让gcc或任何其他工具列出代码库中由于gcc无法检测到的潜在锯齿违规而发生额外加载/存储的所有位置,指针是否属于同一类型或不?这样,我可以与代码分析器进行比较,看看是否可以通过使用restrict
,局部变量,重构等来改善实际情况下的情况。试图猜测编译器在想什么查看生成的汇编程序既耗时又容易出错,特别是对此。如果它们不同,我对C和C ++的答案感兴趣。