c++ - 内存分配 - 15 GB 如何等于 2GB?

标签 c++ memory memory-management

我的一个主要应用程序在运行时崩溃。

我想知道这是否与系统的内存分配问题有关。因此,我创建了一个小测试程序来分配 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/

相关文章:

C++ 对象与结构内存开销

c++ - 在不关闭 native 处理程序的情况下销毁 Boost Asio 套接字

memory - 如何在 Haskell 中获取指针值?

java - Tomcat 关闭失败并出现内存错误

c - 为什么我要 free() 一个由 malloc() 分配的对象?

java - 未关闭的流是否会导致 java 中的内存泄漏?

c# - 当我们从 `using` block 中的方法返回时,内存是如何处理的?

c++ - 是否可以在运行时设置应用程序的 Windows 兼容模式?

python - python 中是否有像 C++11 中那样的多重集的 equal_range?

c++ - C++ 中的测试条件