当同时有 30 个程序时,减少 C 程序的编译时间

Posted

技术标签:

【中文标题】当同时有 30 个程序时,减少 C 程序的编译时间【英文标题】:reduce compilation time of C program when there are 30 simultaneous programs 【发布时间】:2012-05-22 21:06:32 【问题描述】:

我正在尝试制作一个可供浏览器访问的在线 gcc 编译器。对于这一切,我在 windows XP 上使用了 php、cygwin。实际上我是在将浏览器上的代码窗口提供给用户。


大致流程如下:

    $source 写入 .c 文件 .c 文件由 gcc 编译器编译并创建 .exe 文件 .exe 文件的输出显示给用户。

假设c程序中没有用于测试的读取函数我只使用了一个printf语句。


问题是:

如果有大约 30 个同时请求意味着 30 个用户在同一时间点编译程序,那么它将在大约 15 秒内产生输出,这太长了。

请有人帮我减少这段时间。欢迎提出建议

我可以直接读取 C 程序的输出而不制作 .exe 文件吗?

【问题讨论】:

让我知道...您是否让用户能够在您的机器上执行已编译的 C 代码?如果是这样,您对所有这些环境都做了什么沙箱处理? ...编译性能是你的最后一个问题。 @lorenzo-s ya 编译后的代码在我的机器上执行。一切顺利,但我有时间问题 你明白我对沙盒环境的意思了吗?如果我写while(1) 并运行它会怎样?如果我写write_virus_to_file() 并运行它会怎样?等等等等…… @lorenzo-s 我已经通过正则表达式和更多选项检查 C 代码来处理所有情况 使用正则表达式检查 C 代码?哇。如果你不沙箱,那你就有麻烦了。 【参考方案1】:

一个起点可以是探索分布式构建系统。

在 Windows 上,我知道一个(非免费)解决方案是 Incredibuild。大约 8 年前,我们将它用于我们的一个项目,它将 清理和构建 时间从 25 分钟减少到大约 5 分钟。有评论here。

现在,当我刚刚搜索其他替代方案和非 Windows 解决方案时,我也找到了 distcc。

这里还有一个关于alternatives to Incredibuild的讨论(看起来很老)。

【讨论】:

【参考方案2】:

如果每个编译请求的 C 源代码几乎相同,则可以使用启用编译器缓存的构建系统。例如。 waf 和 cmake。他们可以利用上一个建筑的副本来加快编译速度。

【讨论】:

你能详细告诉我吗,我不明白。源代码可能因用户而异。

以上是关于当同时有 30 个程序时,减少 C 程序的编译时间的主要内容,如果未能解决你的问题,请参考以下文章

减少 Boost Python 编译时间

当函数参数与c中的const参数声明不匹配时编译的程序

用visual c ++时,当一个程序运行后,怎么运行第二个程序啊

如何正确统计C程序运行的内存占用量?

当参数相同时锁定程序不运行,但在参数不同时允许运行

调试使用 nmake 编译的 C 程序