为什么编译器(GCC 9.3.0)会抽风编不出来

学术版

Shunpower @ 2025-11-08 10:11:35

RT,自己遇到好多次这种情况了。快速反复编译同一个文件(比如修改 freopen)几次之后编译器就变得非常慢,要编几分钟才能编出来。

以前用 code runner 导致编译和运行是同时发生的,常常怀疑是自己 TLE 了,虚空调试若干年之后发现是编不出来。

想知道为什么会这样。


by Mike_L @ 2025-11-08 10:16:22

贴个示例代码出来


by __Accepted_cyx__ @ 2025-11-08 10:17:26

:::info[豆包回答] 这种编译器突然变慢的现象可能和以下几个原因有关,结合 GCC 9.3.0 的特性和你描述的场景(快速反复编译、修改 freopen 等操作),可以从这几个角度排查:

1. 编译进程未正常退出,导致资源竞争/阻塞

2. 临时文件/缓存堆积,触发磁盘 I/O 瓶颈

3. 编译器自身的缓存机制或 Bug

4. 系统资源耗尽(内存/CPU)

解决建议:

  1. 确保程序正常退出:修改代码时,先保证程序能快速结束(比如注释掉可能阻塞的逻辑),避免残留进程占用文件。
  2. 清理临时文件:编译前用 make clean 或手动删除可执行文件、中间文件(*.o, *.i 等)。
  3. 禁用不必要的并行编译:若使用 make,避免 -j 选项;Code Runner 可配置编译命令为单进程(如 gcc -o main main.c,不加并行参数)。
  4. 检查系统资源:关闭其他占用大量内存/CPU 的程序,确保磁盘有足够空间(至少保留 10% 空闲)。
  5. 升级编译器:尝试 GCC 10 及以上版本,新版本修复了许多旧版本的性能问题。

这种现象更可能是程序残留进程导致的文件锁阻塞系统资源竞争,而非编译器“抽风”。通过排查进程和资源占用,通常能解决问题。

要不要我帮你整理一份编译慢问题排查步骤清单


by Shunpower @ 2025-11-08 10:19:34

@Mike_L ?我在很多不同的代码上这样做都遇到了这种问题,我觉得是代码无关的。


by __Accepted_cyx__ @ 2025-11-08 10:20:39

@Shunpower 可能是你设备问题


by Shunpower @ 2025-11-08 10:22:00

@__Accepted_cyx__ 说得道理,我在我的笔记本上从来没有遇到这种问题,但是在学校电脑上老是这样。

呃,也有可能是 GCC 老版本垃圾。我笔记本上装的是 GCC 15。


by MoCaRabbit @ 2025-11-08 10:32:24

@Shunpower 我也经常遇到,我目前的解决方法是推出 DEV 重进然后点击 运行 (不是编译运行),然后卡一下就行了(((

我也不知这是什么原理,并且这样治标不治本,暂时可以用一下。(比干等它恢复快一些)


by Mike_L @ 2025-11-08 14:18:08

啊这是设备问题啊

我还以为是洛谷(


by _l_l_ @ 2025-11-08 15:47:58

不使用 dev-c++ 解决 100% 问题(


by Shunpower @ 2025-11-09 18:54:48

哦草我用的是 vscode 啊


|