c++ - 为什么我的程序设计为耗尽 RAM 和 CPU 而没有使用所有 RAM 和 CPU?

标签 c++ windows

#include <iostream>
#include <cassert>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <Windows.h>

using namespace std;

char randomLetter()
{
    srand(time(0));
    char rValue;

    while(1)
    if((rValue=(rand()/129)) > 31) 
        return rValue;
}


int main()
{       
    vector<char> meegaString;

    for(int i=0; i < 10000000000; i++)
    {   
        meegaString.push_back(randomLetter());

                if(!(i%10000000)) 
            cout<<"There are: " <<i+1<<" chars in the list"<<endl;

    }

    system("pause");
    return 0;
}

运行此程序之前的 RAM 使用量约为 2500/8000 MB。 到了3200,抛出如下异常:

Unhandled exception at 0x773c15de in Resources gormandizer.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0045f864..

1) 为什么这个程序没有填满整个可用内存,尽管它在 64 位操作系统上运行?

2) 为什么只有 26% 的处理器 (intel core i5) 在使用?

最佳答案

  1. 如前所述, vector 的元素是连续存储的。此外,根据 std::vector 实现中使用的内存分配算法,它可能会尝试提前预分配内存;分配比用于减少 malloc/new 调用次数更多的内存。因此,它可能会达到要求比 32 位操作系统支持的内存更多的程度(这可以解释为什么 64 位进程可以工作,但 32 位进程不会,尽管有足够的内存可用)。

  2. 您的进程正在 4 个核心中的一个核心上运行,而且它非常繁忙,因此占用了大约 25% 的 CPU 时间。其他进程将弥补其余部分。

另见:Being Smart About Vector Memory Allocation

关于c++ - 为什么我的程序设计为耗尽 RAM 和 CPU 而没有使用所有 RAM 和 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11033442/

相关文章:

c++ - 如何将二进制数据推送到 std::string?

c++ - 在 Mac 上用汉字命令调用 popen()

c++ - 非推导上下文中模板参数推导的解决方法

windows - Powershell 文件夹大小排序,自动大小转换

c++ - 我想杀死一个 std::thread 使用它的线程对象?

c++ - 类的可选实例

c# - 在 Visual Studio 2017 中使用 Windows 服务访问 MySQL 数据库

windows - 在 Visual Studio 中使用构建后事件构建控制台

windows - IWebBrowser2对象使用IE7版本,而不是机器上安装的IE版本

wpf - 查找 Windows 应用程序的真实内存占用量