メモリの断片化について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

メモリの断片化について

#1

投稿記事 by h2so5 » 13年前

DXライブラリとGoogle V8 Javascript Engine を使ったプログラムを開発しているのですが、
10回に3,4回の割合で起動中にプログラムが停止します。

環境は、
[tab=30]MinGW + gcc 4.6.2
[tab=30]Windows Vista Home Basic
[tab=30]3GB RAM
[tab=30]プログラム起動成功時のプロセス使用メモリ量: 260MB

デバッガ(GDB)経由で起動した場合は今のところこの現象が確認できていません。

プログラムが停止するタイミングはまちまちなのですが、
起動時にスクリプト実行→画像ロード→スクリプト実行→画像ロードという手順が繰り返されている時のようです。
詳しくはまだチェックできていませんが、何度もメモリの確保をしている部分です。

また、しばしば Javascriptエンジンが "Allocation Failed" というエラーを出します。
原因は特定できていないのですが、今のところメモリの断片化によるアロケーション失敗を疑っています。

メモリの断片化について少し調べてみたのですが、
Windows環境において果たしてこのようなアロケーションの失敗が起こりうるのかがよく分かりません。

これだけの情報では判断が困難かと思いますが、
起動失敗の原因がメモリの断片化である可能性はあるのでしょうか?
よろしくお願いします。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: メモリの断片化について

#2

投稿記事 by ISLe » 13年前

V8のことは知らないのですが…。
Javascriptのガベージコレクション対象のヒープが不足しているのではないでしょうか?

Javascriptで大きなアプリを作ったことはないので分かりませんが、
Javaだとかなり注意深く作らないと、OutOfMemoryで落ちたりとか、Full GCで数分間ハングアップしたように止まる現象も珍しくないです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: メモリの断片化について

#3

投稿記事 by h2so5 » 13年前

スクリプトエンジンまわりのデバッグをしていたところ、
スタックを破壊している部分が見つかり、そこを修正したら正常に作動するようになりました。

Allocation Failed のエラーは、スタックの破壊によってどこかでスクリプトが暴走したのかもしれません。
ISLe さんが書きました:V8のことは知らないのですが…。
Javascriptのガベージコレクション対象のヒープが不足しているのではないでしょうか?
V8はGCの動作がかなり消極的なので、GCがボトルネックになることは少ないのではないかと思います。
ともあれ、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る