我正在开发一个c/c++/java代码的在线代码判断软件。
我想包括判断代码的各种参数,即编译时间、执行时间、内存使用情况,就像IDEONE API提供的一样。
在LINUX环境下编译/执行代码时,如何提取这些参数?有没有什么特别的命令?
还有其他可以用来判断代码的参数吗?
发布于 2013-05-08 14:38:05
判断动词在你的问题中有点奇怪(可能太不精确了)。也许你的意思是评估?
假设被评估的源代码是由最近的GCC编译器(即,GCC的4.7或4.8版)编译的,并且您可以参数化(或只是重复)它的编译,您可以考虑出于评估或度量目的而扩展和定制GCC编译器。这既可以直接通过GCC插件(痛苦地用C或C++编写),也可以通过MELT扩展(MELT是一种特定于领域的语言,用于扩展和自定义GCC)。
要走这条路,您需要做一些工作,因为您需要深入了解GCC的内部结构。MELT probe可能会帮助您更多地理解Gimple表示(在GCC内部)。您还可以尝试使用gcc -fdump-tree-all编译一些示例代码,这会生成许多转储文件。
所以这个想法是你需要时间(几天,也许几周)来开发一个熔融扩展(例如,在一些文件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的支持要少得多(因为即使gcj存在,也没有人使用GCC来编译Java,而且因为gcj可能支持一些旧的Java标准的子集)。
请订阅gcc-melt@googlegroups列表,并在那里询问与熔化相关的问题。明确地提到你对订阅的兴趣(可能是你的问题)。
发布于 2013-05-08 14:20:23
有一个time命令可以给出一个二进制文件的执行时间。这样,您就可以获得编译时间time gcc code.c或执行时间time ./a.out。对于内存使用,您可以使用valgrind或ps。对于ps,如果您使用stdin作为输入,那么它应该很简单。只需启动应用程序,在后台以一定的时间间隔运行ps,并将输入提供给应用程序。
https://stackoverflow.com/questions/16433700
复制相似问题