我想在一个二维数组中分配 10^9*10^9 的内存,但这是不可能的。他们有什么出路吗?
我认为向量可以解决这个问题,但我不知道该怎么做。
您今天无法在任何计算机中分配 10 18字节的内存(大约是一百万太字节)。但是,如果您的数据大部分为零(即稀疏矩阵),那么您可以使用不同类型的数据结构来存储您的数据。这完全取决于您存储的数据类型以及它是否具有任何冗余特征。
假设非零元素的数量远小于 10^18,您将需要阅读sparse arrays。事实上,稀疏数组中的大多数元素都为零甚至不是必需的——它们只需要相同即可。基本思想是将非默认值保留在列表之类的结构中;列表中未找到的任何值都被假定为默认值。
我想在一个二维数组中分配 10^9*10^9 的内存,但这是不可能的。他们有什么出路吗?
这远远超出了当前的硬件能力,而且这么大的阵列不适合任何实际用途(您可以自由计算遍历每个元素需要多少几千年)。
您需要创建“稀疏”数组。仅将非零元素存储在内存中,提供类似数组的接口来访问它们,但在内部将它们存储在类似的东西中std::map<std::pair<xcoord, ycoord>, value>
,对不在 map 中的所有元素返回零。只要您不做一些鲁莽的事情,例如尝试将每个元素设置为非零值,这应该是足够的数组替换。
所以....
你需要那么多内存做什么?