我正在尝试创建像spoj.pl这样的编程法官。我必须测量 C/C++/Java 程序正在使用的时间和内存。我想为我希望执行的程序设置最大内存限制。你能建议我怎么做吗?
3 回答
为了分析时间和内存消耗,您可以使用 callgrind:http: //valgrind.org/docs/manual/cl-manual.html
系统-, where-, how-, what-,...- 依赖。
限制,即:
Linux 命令行: > $ ulimit -v NNN && ./tha_prog
, $ man ulimit
, $ ulimit -a
.
Linux C 编码:> setrlimit()
linux.die: setrlimit , opengroup: setrlimit
Windows: CreateJobObject
,作业对象
那么问题也变成了限制什么。静态库与动态库等。
要配置文件:
Valgrind 与 callgrind,- 和即kcachegrind,+++。
在 Windows 上,您可以使用jobs,它们是内核对象,允许您对当前不在另一个作业中的任何进程进行沙箱处理。您可以应用所有不同类型的限制,包括最大处理时间和内存/工作集限制。
有几个步骤
1. 调用CreateJobObject
以获取内核对象的句柄
2. 调用SetInformationJobObject
以设置您的限制
3. 创建一个要对其施加限制的挂起进程
4.AssignProcessToJobObject
使用作业和进程句柄调用
5. 恢复通过调用进程的主线程ResumeThread