对于 mpir 中的小数组和 float ,我没有收到错误消息,但当我想创建一个非常大的数组时。假设 >100,000,000 我收到以下错误消息:
GNU MP:无法分配内存(大小=16) 按任意键继续 。 。 .
不幸的是我需要 2 个大数组。一个的大小为 100,010,000,另一个的大小为 1,000,100。这在 Windows 64 位机器上可能吗?
有没有办法从内存中清除数组的一部分而不是整个数组(在 MPIR 上)以创建空间?
最佳答案
您无法成功地将那么多内存分配到一个数组中,因为数组的元素必须连续出现在内存中,并且堆的当前状态不太可能允许出现类似情况。
假设您正在谈论 float
数组,其中系统上的 float
的大小可能为 4
,这是唯一可能的方法如果存在 4 亿个连续内存地址未被占用,则您能够分配 400MB 内存。
编辑:我并不是说这是不可能的,我只是说它不可靠。
编辑2:解决方案是按 block 分配内存。您可以将其分配为 100 万个 float 的组,而不是一个包含 1 亿个 float 的数组。您更有可能分配 100 个 4MB 的 block ,而不是 1 个 400MB 的 block 。
关于在 mpir 中创建大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15667065/