我的一个主要应用程序在运行时崩溃。
我想知道这是否与系统的内存分配问题有关。因此,我创建了一个小测试程序来分配 1GB 内存并同时运行 15 个这样的进程,因此总共使用 15GB 内存。
但是,当我运行这个程序时,任务管理器显示它只占用了 2GB 的 RAM?这怎么可能?
我写了一个示例代码如下
char *ptr[1024];
for ( i = 0 ; i < 1024 ; ++i )
{
ptr[i] = new char[1024 * 1024];
std::cout << " Allocated 1024 MB" << i << " th time " << std::endl;
}
最佳答案
Windows 是一个请求分页的虚拟内存操作系统。使用 operator new 分配内存只会分配虚拟内存。在您实际访问 内存之前,您不会开始使用物理 内存、RAM。你没有做。
您可以通过触摸每 4096 个字节来强制分配 RAM,最好将其写入,否则它将被优化掉:
size_t size = 1024 * 1024;
ptr[i] = new char[size];
for (size_t j = 0; j < size; j += 4096) ptr[i][j] = 0;
但这样做毫无意义,只会减慢程序速度。并且实际上并没有测试任何东西,一个进程不能在 Windows 上用完 RAM。将任务管理器置于程序员模式,添加提交大小的列。这是真实的数字。
关于c++ - 内存分配 - 15 GB 如何等于 2GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18411815/