在C ++中,编译器优化可能通过利用程序中的未定义行为(如有符号整数溢出和解除引用空指针)来产生“意外”程序行为。如果在生产中使用发布版本,则必须在发布版本中测试程序。
在C#中,未定义的行为很少见。在
之外的生产中使用之前,是否有更多理由在发布版本中测试程序优化可以产生不同的程序行为,比如C ++吗?
答案 0 :(得分:1)
这与多线程时序有关:在发布模式下,编译器可以通过重新排列指令或用常量替换值来执行某些优化,这些优化可以改变代码的运行时行为(包括在看似正确的代码中引入无限循环)。这是关于易失性和非易失性内存读取的related question,正如Hans在评论中指出的那样,an article from The Daily WTF关于C#编译器用常量值替换变量作为优化。