0

我正在开发一个c/c++/java代码的在线代码判断软件。

我想包括各种参数来判断代码,即编译时间,执行时间,内存使用,就像IDEONE API提供的一样。

在 LINUX 环境中编译/执行代码时如何提取这些参数?是否有任何特定命令?

还有其他参数可以用来判断代码吗?

4

2 回答 2

1

有一个time命令可以为您提供二进制文件的执行时间。有了它,您可以获得编译时间time gcc code.c,或执行时间,time ./a.out。对于内存使用情况,您可以使用valgrindps。使用 ps,如果您使用标准输入进行输入,它应该很简单。只需启动应用程序,在后台以特定时间间隔运行 ps,然后将输入提供给应用程序。

于 2013-05-08T06:20:22.957 回答
1

你的问题中的判断动词有点奇怪(这可能太不精确了)。也许你的意思是评估

假设评估的源代码是由最近的 GCC 编译器(即 GCC 的 4.7 或 4.8 版)编译的,并且您可以参数化(或只是重复)其编译,您可以考虑扩展和自定义GCC编译器用于评估或度量目的。这可以直接通过 GCC 插件(痛苦地用 C 或 C++ 编码),或者通过MELT扩展(MELT 是一种用于扩展和定制 GCC 的领域特定语言)。

您需要做一些工作才能走这条路,因为您需要深入研究 GCC 内部。MELT 探针可能会帮助您更多地理解 Gimple 表示(在 GCC 内部)。您也可以尝试编译一些gcc -fdump-tree-all生成许多转储文件的示例代码。

所以这个想法是,您将花费时间(几天,也许几周)来开发一个 MELT 扩展(例如在某个文件中shiven.melt)用于分析、度量和评估目的,并且您将 [重新] 编译example.c源代码,例如

gcc -fplugin=melt \
  -fplugin-arg-melt-extra=shiven \
  -fplugin-arg-melt-mode=shivenanalysis \
  -c example.c

(当然你会添加其他编译器标志,例如-O -I/some/include/dir/...)

然后,你可以做一个 MELT 扩展来测量编译代码的一些特性,比如函数的数量、基本块的数量、Gimple 指令的数量等。这将在编译时发生。您的 MELT 扩展名(在您的文件中shiven.melt)可以例如在某个数据库中写入一些统计信息。

扩展 GCC 对 C、C++、Fortran、Ada .... 源代码有意义,但对 Java 来说意义不大(因为没有人使用 GCC 来编译 Java,即使gcj存在,而且gcj可能支持一些旧 Java 标准的子集)。

请订阅gcc-melt@googlegroups列表并在那里询问 MELT 相关问题。在订阅中明确提及您对 MELT 的兴趣(也许是您的问题)。

于 2013-05-08T06:38:04.683 回答