由于潜在的混叠违规,是不是可以列出负载?

Posted

技术标签:

【中文标题】由于潜在的混叠违规,是不是可以列出负载?【英文标题】:Is it possible to list loads due to potential aliasing violations?由于潜在的混叠违规,是否可以列出负载? 【发布时间】:2014-10-13 11:39:53 【问题描述】:

我一直在编写一个相当大的性能关键代码库,其中使用最新版本的 gcc 编译会给出许多关于类型双关语的警告,导致我使用 -fno-strict-aliasing 进行编译。我不相信这里有任何可以避免的性能损失。然而,我确实相信同一类型的别名指针可能存在更重要的问题。

是否有任何方法可以获取 gcc 或任何其他工具来列出代码库中由于 gcc 无法检测到的潜在别名违规而发生额外加载/存储的所有位置,无论指针是否属于同一类型或不?这样,我可以与代码分析器进行比较,看看情况是否可以通过使用restrict、局部变量、重构等来改善实际情况。试图通过查看来猜测编译器的想法生成的汇编程序既费时又容易出错,尤其是在这方面。如果 C 和 C++ 不同,我对它们的答案很感兴趣。

【问题讨论】:

由于严格混叠,修复警告似乎更安全,不要使用-fno-strict-aliasing 有趣的问题。如果 GCC 不提供这样的功能,您还可以考虑使用分析生成的程序集或机器代码的技术,以至少检查结果的不同之处。我使用 GCC 为两组不同的构建选项做了类似的事情,发现对于我正在测试的设置几乎没有任何区别! 【参考方案1】:

GCC Debug options

试试 -ftree-dump-alias(在上面的链接中搜索别名)。

【讨论】:

以上是关于由于潜在的混叠违规,是不是可以列出负载?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 完整例程74. 图像的抗混叠

尝试从 API 中列出数据会给出错误消息“不变违规:元素类型无效:........”

在啥意义上 valarray 没有混叠?

4.2 时间混叠

fastlane match 命令是不是可以潜在地撤销证书

利用nginx实现Redis的负载均衡,应该怎么配置?