nsi*_*akr 4 c++ memory memory-management
我的一个主要应用是在运行时崩溃.
我想知道这是否与系统的内存分配问题有关.因此,我创建了一个小型测试程序来分配1GB内存并同时运行15个这样的进程,因此总共使用了15GB的RAM.
但是,当我运行这个程序时,任务管理器显示它只占用了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;
}
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 13
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;
Run Code Online (Sandbox Code Playgroud)
但这是一件毫无意义的事情,它会让你的节目放慢速度.并且实际上没有测试任何东西,一个进程不能用完Windows上的RAM.将任务管理器置于程序员模式,添加Commit size列.那是真实的数字.