如何创建以下列表并将其保存到文件而不会耗尽内存?
li = 1:2^40;
我知道创建列表并将其写入文件块的明显解决方案。我想知道是否有更优雅的方式。
答案 0 :(得分:2)
由于该列表需要8.8 TB的内存,因此这里有一个简单的解决方案可以防止这种情况需要:
loop_limit = uint64(2^40);
ii = uint64(1);
chunksize = 1000;
fid = fopen('output.txt', 'w');
while ii < loop_limit
for jj = 1:chunksize
fprintf(fid, '%d\n', ii);
ii=ii+1;
if ii >= loop_limit
break; end
end
end
fclose(fid);
在任何地方都没有创建过任何列表;内存开销仅限于使用的少数变量。
请注意,您提供的列表(1:2^40
)将超过Matlab的最大循环索引2147483647,这是双循环的原因。
另请注意,此文件output.txt
将占用8.8TB,因此......最好先释放一些硬盘空间。
现在显然,这绝对令人难以置信。您能否提供有关“旧”程序如何查询文件的更多信息?因为我有一个强烈的预感,有一些bash / DOS批处理技巧,你可以用来模拟包含这些数字的文件,而不需要实际需要该文件。