当向量存储在 RAM 中时,变量究竟存储在哪里?
Where exactly are variables stored while vectors store in 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
作为矢量元素类型。
我使用了这个并编译了它:
#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
作为矢量元素类型。