我想在gen.exe生成的随机测试中测量abc.exe的最大内存使用量。我该怎么做?
我在gen.exe的测试中运行abc.exe的代码如下所示:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i = 0;
while (true)
{
string si = to_string(i);
cout << i << "\n";
if (system(("echo " + si + "| ./gen.exe > test.in").c_str())) // gen.exe is test generator
{
cout << "gen error\n";
break;
}
if (system(("./abc.exe < test.in > a.out"))) // abc.exe is the program I want to test
{
cout << "abc error\n";
break;
}
i++;
}
}
我知道我可以使用time -v ./abc.exe,但使用的内存会在终端中打印出来,但我希望能够将其保存到变量中。
1条答案
按热度按时间a0zr77ik1#
可以使用
getrusage( RUSAGE_CHILDREN, ... )
来获取最大的驻留内存,注意这个调用将返回最大的子进程在那个时间点使用的最大内存。在下面的例子中,我使用了boost::process,因为它提供了更好的控制,但它取决于你是否使用
std::system
,工作方式是一样的。它打印
如果你不能使用boost库,你就得多做一点工作,但这仍然是可行的。
如果你只想知道你的子进程的最大大小,那么下面的
std::system
:它打印
但是,如果您想跟踪子进程执行期间的内存使用情况,则不能使用
std::system()
。首先,您需要调用fork()
来生成一个新进程,然后调用execv()
来执行bash命令。我的计算机上的结果是:
有关于这个帖子的a video。