以下プログラムは32GBほどメモリを積んでいるPCで実行してもOut of memory!と表示されて落ちます。おそらく、配列が多すぎるのだと思いますが、配列に入れられる数を増やすことはできないのでしょうか?
ちなみに、一桁少ない数だと1秒位で正常終了します。
use strict;
use warnings;
my @all;
for(1..100000000){ #10000000なら問題なく終了する
push(@all,$_);
}
open( FT, ">test.txt" );
print FT join "\n", @all;
print FT "\n";
close FT;
No.4ベストアンサー
- 回答日時:
32ビットのperlの場合
D:\goo\perl>H:\perl\32\perl\bin\perl.exe -v
This is perl 5, version 28, subversion 2 (v5.28.2) built for MSWin32-x86-multi-thread-64int
64ビットのperlの場合
D:\goo\perl>H:\perl\64\perl\bin\perl.exe -v
This is perl 5, version 28, subversion 2 (v5.28.2) built for MSWin32-x64-multi-thread
32ビットの場合、
MSWin32-x86-multi-thread-64int
と表示されますが、64ビット版ということではなさそうですね。
あなたが使用されているのは、32ビット版かと。
ちなみに、こちらで
上記の32ビット版で、当該スクリプトを実行すると、Out of memory! となり
64ビット版で、実行すると正常終了します。
No.5
- 回答日時:
MSWin32-x86-multi-thread-64int
x86が32ビットアーキテクチャ
x64が64ビットアーキテクチャ
を表しています。
32ビットの場合、扱えるメモリは4GBまでです。
64intは、int型(整数)のデータが64ビットに対応している意味かと思われます。
No.3
- 回答日時:
64ビット版のperlを使用すれば解決しますが、
現行のperlを使用して解決したい場合です。
前提として、test.txtを作成するのが目的の場合です。
(配列に入れられる数を増やすことが目的ではない)
10回に分けて、出力を行えば良いかと。
1回目 1~10000000
2回目 10000001~20000000
・・以降同様
以下、サンプルスクリプトです。
use strict;
use warnings;
sub print_out{
my($st,$en) = @_;
my @all;
for($st..$en){ #10000000なら問題なく終了する
push(@all,$_);
}
print FT join "\n", @all;
print FT "\n";
}
open( FT, ">test.txt" );
for (my $i = 1; $i <= 10; $i++){
print_out(($i-1)*10000000+1,$i*10000000);
}
close FT;
No.2
- 回答日時:
手元の Strawberry Perl for Windows 5.32.0 では動いてる. タスクマネージャーで調べると 5 GB くらい使ってるので, 64ビットじゃないと動かないと思う.
書き方がちょっと古いってのはさておき.
No.1
- 回答日時:
こちらで、そのスクリプトを実行しました。
正常に終了しました。
32ビット版のperlを使用されていないでしょうか。
こちらで使用したStrawberry Perl for Windows のバージョンです。
perl -v
This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread
Copyright 1987-2021, Larry Wall
ちなみに当方のマシンのメモリは12GBです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- PHP printが「ダブルスタンダード」にならないのはなぜ? 2 2021/12/21 05:45
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- 英語 日本語に翻訳できる方おねがいします。 3 2021/11/19 09:57
- 英語 英文和訳をしてみましたが、どうもしっくりしません。ご教示いただければ幸いです 5 2022/11/18 17:46
- TOEFL・TOEIC・英語検定 英語 文法 1 2023/02/27 14:01
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlで2次元配列をサブルーチ...
-
Excel VBA ユーザーフォームの...
-
VBAのautofilter、criteriaの配...
-
マクロ Publicでの配列定義
-
二次元配列のインデックスについて
-
リストボックスに縦スクロール...
-
配列を初期化する時ってどうす...
-
Excel(VBA)で配列の要素数を...
-
perlで配列の要素が空なのを知...
-
Dim flag(4) as boolean で配列...
-
ファイル名に日付・時刻を付与...
-
エクセルVBAでTransposeの不思議
-
VBA 多次元配列を用いてグルー...
-
perl 配列の要素数について
-
重複しない乱数発生
-
二次元配列における要素数のは...
-
fortran
-
perl このテキストファイルを簡...
-
jcode->jfold で禁則処理
-
可変長配列を、動的確保した固...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
二次元配列における要素数のは...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
組み合わせについての質問です...
-
隣同士の数字を足し合わせる
-
複数の配列の全ての組み合わせ...
-
perl 初等プログラミングについて
-
jcode->jfold で禁則処理
-
一致する要素が格納されている...
-
チェックボックスのperlでの値...
おすすめ情報
バージョンにつきまして
Perl -v
This is perl 5, version 28, subversion 2 (v5.28.2) built for MSWin32-x86-multi-thread-64int
Copyright 1987-2019, Larry Wall
OS Windows 10 64bit
たくさんの回答をいただきありがとうございます。
64ビット版を使っていると思いこんでいました。
また、当方ではすぐに試せない環境なので、実際に試してくださる方がおられ本当に助かりました。
64ビット版の導入を考えようと思います。