0

如何创建以下列表并将其保存到文件而不会耗尽内存?

 li = 1:2^40;

我知道创建列表并将其分块写入文件的明显解决方案。我想知道是否有更优雅的方式。

4

1 回答 1

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,所以...最好先释放一些硬盘空间。

Now obviously, this is absolutely mindbogglingly horrific. Can you provide more information on how the "old" program queries the file? Because I have a strong hunch that there is some bash/DOS batch trick you can use to emulate a file that contains these numbers, without actually needing the file.

于 2012-09-25T09:41:13.737 回答