如何启动有限内存的进程?

时间:2009-10-01 18:38:46

标签: c++ winapi operating-system

如何使用c ++和win32 API创建和启动具有RAM限制的进程(即启动.exe文件)?

如果进程超出限制,将返回哪个错误代码?

4 个答案:

答案 0 :(得分:2)

您可以使用CreateProcess()来生成流程。

完成后,您可以使用SetProcessWorkingSetSize()来尝试控制它使用的物理内存量,但这对VMM来说是一个非常强烈的建议,而不是一些会导致malloc()的实际法令。和新的开始失败。

没有办法说“这个过程需要4mb的内存,之后所有的分配都会失败”。我的意思是,你要链接到win32 dll,你不知道这些东西需要什么样的内存使用。如果您希望您的应用只占用一定数量的内存,请不要分配更多内存。并且不要做分配内存的事情。

关于错误代码的问题毫无意义。

答案 1 :(得分:2)

NT Job objects(SetInformationJobObject& JOBOBJECT_BASIC_LIMIT_INFORMATION

答案 2 :(得分:2)

工作对象是正确的方法。

对于错误代码,确实没有错误代码。您创建进程(使用CreateProcess)和作业(使用CreateJobObject),然后将进程与作业对象(使用AssignProcessToJobObject)相关联。

如果子进程分配的内存超过允许的内存量,则父进程不会收到错误消息。实际上,即使父进程退出,也会强制执行该限制。如果子进程尝试分配的内存超过允许的内存量,则分配将失败。

答案 3 :(得分:1)

据我所知,在Windows上没有这种可能性。对于测试和其他事情而言,这将是非常有用的。

你在java上有这个,因为JVM只使用预定量的内存,但它不是一个功能,而是一个问题; - )