次のリストを作成し、メモリ不足にならずにファイルに保存するにはどうすればよいですか?
li = 1:2^40;
リストを作成し、それをチャンクでファイルに書き込むという明白な解決策を知っています。もっとエレガントな方法はないかと考えました。
そのリストには 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 バッチ トリックがあるという強い予感があるためです。