如何使用c ++和win32 API创建和启动具有RAM限制的进程(即启动.exe文件)?
如果进程超出限制,将返回哪个错误代码?
答案 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只使用预定量的内存,但它不是一个功能,而是一个问题; - )