当向量存储在RAM中时,变量究竟存储在哪里



我使用了这个并编译了它:

#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> articles (119999999,"ads");
std::cout <<   articles[1];
getchar();
return 0;
}

然后发生内存错误,表示内存已满(因为没有发生信息丢失(。我打开了任务管理器,然后又打开了程序。这个程序消耗了250兆字节,然后我的电脑突然关机了。我问自己,为什么当我声明许多变量和数组时,没有内存错误。

以至于我写了一个程序来创建一个文本文件,然后写数千个变量,然后我翻译了那个文件,程序正常打开了!

变量存储在哪里?矢量只存储在RAM中吗?

sizeof(std::string)通常为32字节。即使使用短字符串优化,内存请求也是119999999*32字节的连续块。这大约是4Gb,超出了你电脑的能力。

如果需要存储重复的字符串,则将std::reference_wrapper视为矢量元素类型。

最新更新