
以下プログラムは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ランキング
-
ソート順の配列に順位表示する
-
HTML::Parserの解析結果
-
バイナリデータの検索(VB.NET2008)
-
Excel VBA ユーザーフォームの...
-
不特定数存在する特定文字直後...
-
文字列の分割について
-
参照配列の要素数の求め方は?
-
UWSCの終了の仕方
-
foreachでループした変数を他の...
-
ごめんなさい 応用てきだとおう...
-
VBAでの一時停止と再開の方法
-
クッキーが無効のとき処理
-
重複ファイルを削除したいので...
-
「人を傷つけることは悪いこと...
-
forの中にリストを書くとその後...
-
エクセルの当番表を作っていま...
-
配列にaaaからzzzまでの17576(2...
-
隣接交換法のアルゴリズムについて
-
VLC media Playerでのループ再生
-
(C#)フォームのキャンセルで計...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでTransposeの不思議
-
VBAのautofilter、criteriaの配...
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
チェックボックスのperlでの値...
-
リストボックスに縦スクロール...
-
Strawberry Perl for Windows ...
-
クラスに配列を渡す方法
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
文字の整列(printf)
-
Dim flag(4) as boolean で配列...
-
perl 配列の要素数について
-
複数の配列の全ての組み合わせ...
-
バイナリデータの検索(VB.NET2008)
-
perlで配列の要素が空なのを知...
-
可変長配列を、動的確保した固...
-
perl このテキストファイルを簡...
-
VBScript 配列
-
VB6で配列の最大値を簡単に求め...
おすすめ情報
バージョンにつきまして
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ビット版の導入を考えようと思います。