我们如何在C中分配10 ^ 15的内存

san*_*ick -2 c memory-management

我需要分配10 ^ 15的存储器来存储可以是long long类型的整数.如果我使用数组并声明类似的东西

long long  a[1000000000000000];
Run Code Online (Sandbox Code Playgroud)

这永远不会奏效.那么如何分配如此大量的内存呢?

pax*_*blo 7

真正大的数组通常不是内存的工作,更多的是磁盘的工作.每个64位的10个15个数组元素(我认为)是8PB.目前,您可以以15美元左右的价格购买8G内存片,因此,即使您的机器可以处理大量内存或地址空间,您也需要花费大约1500万美元.

此外,即将推出的DDR4主频高达4GT/s(千兆转移),即使每次传输都是64位值,只需将该阵列初始化为零,仍需要大约一百万秒.在你的代码甚至开始做任何有用的事情之前,你真的想等待11天半吗?

而且,即使你走了磁盘路线,这也是相当多的.在(大约)每TB 50美元,您仍然需要400,000美元,您可能必须提供自己的软件来管理这些8,000个磁盘.而且我甚至不打算弄清楚在磁盘上初始化阵列需要多长时间.

可能需要考虑重新表述您的问题以指出实际问题,而不是您目前拥有的问题,建议的解决方案.可能你根本不需要那么多存储空间.

例如,如果你在谈论一个数组,其中许多值保持为零,稀疏数组是一种方法.