当我在Windows(7及以上版本)上运行64位程序,并且该程序尝试分配过多内存(接近物理内存的100%),系统将停滞不前。如果我没有及时捕获并杀死有问题的进程,系统将变得无响应,需要硬重启。显然,程序不应该尝试分配这么多内存,但是错误可能会发生,我想保护其他正在运行的进程免受测试/调试代码中任何此类错误的影响。(在32位中这不是太大的问题,因为逻辑内存限制提供了一个防止系统范围内内存窒息的安全网。)
所以我有两个问题:
1. 进程可以限制其内存消耗吗?在Windows中是否有系统调用可以设置内存限制,以便超出限制的分配失败而不是崩溃整个系统? 2. 或者,是否有任何方法可以设置系统范围的每个进程内存限制或为特定应用程序设置限制?
这是一个导致我的计算机冻结的示例代码。它使用Visual Studio 10.0编译为x86_amd64配置,并在具有16 GB RAM的Windows 8.1笔记本电脑上运行。它尝试分配32 GB的内存。自行决定是否运行。
所以我有两个问题:
1. 进程可以限制其内存消耗吗?在Windows中是否有系统调用可以设置内存限制,以便超出限制的分配失败而不是崩溃整个系统? 2. 或者,是否有任何方法可以设置系统范围的每个进程内存限制或为特定应用程序设置限制?
这是一个导致我的计算机冻结的示例代码。它使用Visual Studio 10.0编译为x86_amd64配置,并在具有16 GB RAM的Windows 8.1笔记本电脑上运行。它尝试分配32 GB的内存。自行决定是否运行。
int main(void)
{
const static int csNumArrays=10, csArraySize=800000000;
int i, j, **p;
p=new int*[csNumArrays];
for (i=0; i<csNumArrays; ++i)
{
p[i]=new int[csArraySize];
for (j=0; j<csArraySize; ++j)
p[i][j]=j;
}
return 0;
}