当同时有 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 程序的编译时间的主要内容,如果未能解决你的问题,请参考以下文章