我有一个网络程序,其中涉及多个交互线程和一个用于重叠网络 I/O 的线程池。我正在使用 MinGW 进行编译,它是 Windows 的 gcc。
在没有编译器优化的情况下,它可以在多台不同的机器上 100% 正常工作,但是当我打开优化时,它就会崩溃。
这种情况是否应该发生,或者这是否揭示了我需要修复的错误?
最佳答案
最可能的解释是它揭示了您需要修复的错误。这很可能是线程中的竞争条件,但也可能是别名冲突。
一个可以帮助您定位问题的技巧,尤其是在您轻松复制问题的情况下,是进行二分搜索来查找受影响的文件。基本上,编译一半经过优化的文件,一半不经过优化的文件。查看代码是否有效或崩溃。这会将问题定位到一半的代码。重复此过程,缩小有问题的文件范围,直到将其本地化为文件。如果需要,将该文件分成两部分,并将代码从一个文件移动到另一个文件,以找出优化时失败的代码块,而不是未优化时失败的代码块。
关于c - 多线程 C 代码在编译器优化下会崩溃,如果没有编译器优化,则可以完美运行,这是预期会发生的情况,还是肯定是一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221339/