プロが教える店舗&オフィスのセキュリティ対策術

こんにちわ,
現在プログラムの学習をしているのですが,
gdbライブラリでEfenceを使用してメモリのオーバーを検出しようとしているんですが,大きなファイルを読み込もうとしたときに,

ElectricFence Exiting: mmap() failed: Cannot allocate memory

というエラーがでて終了します。mmapは使用していないはずなのにこのエラーが出るのはなにかEfenceの中で動作しているからなのでしょうか。
また,これを解決するにはどのような部分を見ればいいのでしょうか。

ちなみにC言語,Linuxでプログラムを作成しています。

よろしくお願いします。

A 回答 (1件)

ElectricFenceがmmapを呼び出しています。

ElectricFenceはmalloc等の関数を横取りし、要求されたサイズの数倍~数十倍のメモリの確保を行います。従って、このElectricFence Exiting: mmap() failed: Cannot allocate memory のメッセージは、メモリ不足の為、メモリの確保ができなかったことを示しています。
対策としては、大きなファイルを読み込まないことが考えられます。どうしても、Efenceを使用して大きなファイルを読み込む必要があるのでしょうか。また、そのファイルの読み込みは、どの関数(システムコール)を使用していますか。また読み込んだ、内容は、どのようにして内部に保管していますか。(読み込んだ全データを内部のメモリに展開しているのでしょうか。)大きなファイルを読み込んだとしても、多量にメモリを使用しない方法をとることが出来れば、この問題は解決できると考えます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!