【问题标题】:Visual C Optimization differences between 2008 and 20102008 年和 2010 年之间的 Visual C 优化差异
【发布时间】:2012-05-30 20:32:36
【问题描述】:

我正在使用visual c 2008 和visual c 2010 构建一个相当复杂的算法。当我在VC 2010 中启用优化(特别是/Og)进行编译时,该算法会产生错误的输出。

在 VC 2008(优化或不优化)或不优化的 VC2010 中构建完全相同的代码会生成行为正确的算法。

我很难在启用优化的情况下调试代码,并且已经坚持了很长一段时间。有谁知道不同版本的优化有什么不同吗?

【问题讨论】:

  • 这通常发生在您调用未定义的行为时。即使使用另一个编译器“它可以工作”,你也很可能做错了什么。
  • 生成的代码是不是很慢,还是产生了错误的结果?您的措辞并不完全清楚,引起未定义行为注意的新优化并非闻所未闻。
  • 您可能希望通过 Windows 世界中的任何 valgrind 等价物来运行您的程序。
  • 它会产生错误的结果。该代码适用于许多其他平台,包括 DSP 和 ARMS。
  • 调试不仅仅意味着使用调试器单步执行代码。添加 printfs,添加断言,在代码中进行检查以仔细检查您的假设。在代码中创建统计数据,然后在最后或在不同点转储。在代码中放置探针以验证每个步骤/功能/块/迭代/等。逐渐缩小范围,以便找到发生错误的点。编译器通常经过良好测试,可以为数十亿行代码生成正确的代码。几乎总是您的代码出错,而不是编译器。

标签: c visual-studio visual-c++ optimization compiler-optimization


【解决方案1】:

这可能是编译器错误,但您应该尝试 /Wall 以启用所有警告并修复所有警告。还有运行时检查,如 /RTCu(未初始化的本地使用检查),您可以使用它来隔离问题。还要检查代码中的所有类型转换,以确保它们是合法的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2012-10-22
    • 2016-08-12
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多