メモリ不足エラーの処理

提供: RAD Studio
移動先: 案内検索

コマンドラインでの ILINK32 と ILINK64 の利用 への移動


RAD Studio の ILINK32 または ILINK64 を使用する際、Fatal: Out of memory メッセージを受け取ることがあります。 これを処理するには、メモリ不足となっているリンカ ヒープを判別し、そのサイズを増やす必要があります。

必要なヒープ領域のメモリ サイズを増やすには、次を行います:

1. [ツール|オプション...|IDE|コンパイルと実行]と移動します。
2. 問題が発生しているリンカ ヒープを参照するには、[診断][詳細]メニュー)を選択します。
3. 再びリンク付けを試み、Fatal: Out of memory メッセージが表示されたら、Output タブをクリックします。 どのリンカ ヒープがオーバーランしているかを識別する追加情報が含まれています。
4. Outputタブで、次の行を探します:

Overrun on linker heap:
この Overrun on linker heap: メッセージの後にあるヒープが、オーバーランしているヒープです。
すべてのヒープについての値が、この行の後に一覧されます。以下のをを参照してください。
  • オーバーランしているヒープの後にある、2 つの16進数を見てください。
  • 1つ目の値は、そのヒープがオーバーランしている可能性が検知された際の、リンカが必要とするサイズを示しています。
  • 2つ目の値は、領域確保されているサイズです。
  • 1つ目と2つ目の値を比較して、1つ目の値を超えているヒープの値を見つけます。

Handling errors.png
5. そして、必要としているヒープのサイズを増加させます。これを行うには、[プロジェクト|オプション...|C++ リンカ]に移動し、[リンカ ヒープの設定]で、新しいヒープ サイズを設定します。

  • 32ビット Windows プラットフォームでは、ヒープ領域は 5 つあります。大抵の場合、それらのうち、次の 3 つを増加させれば十分です: コード ヒープ サイズデータ ヒープ サイズ情報ヒープ サイズ。レポート テスト ケースで使用されているサンプル値を参照してください:
  • コード ヒープ サイズ: 0x14000000
  • データ ヒープ サイズ: 0x0d000000
  • 情報ヒープ サイズ: 0x0B000000
  • RO データ ヒープ サイズ: 0
  • TDS ヒープ サイズ: 0
  • 64ビット Windows プラットフォームでは、ヒープ領域は 14 つあります。 大抵の場合、それらのうち、次の 2 つを増加させれば十分です: Dwarf pubtypes ヒープ サイズDwarf aranges ヒープ サイズ。レポート テスト ケースで使用されているサンプル値を参照してください:
  • コード ヒープ サイズ: 0
  • データ ヒープ サイズ: 0
  • Dwarf abrbrev ヒープ サイズ: 0
  • Dwarf aranges ヒープ サイズ: 0
  • Dwarf info ヒープ サイズ: 0
  • Dwarf line ヒープ サイズ: 0
  • Dwarf loc ヒープ サイズ: 0
  • Dwarf macinfo ヒープ サイズ: 0
  • Dwarf pubtypes ヒープ サイズ: 0x02400000
  • Dwarf ranges ヒープ サイズ: 0
  • Dwarf str ヒープ サイズ: 0x08000000
  • 情報ヒープ サイズ: 0
  • RO データ ヒープ サイズ: 0
  • TDS ヒープ サイズ: 0
C++Linker.png


6. 再びリンクを試みます。Fatal: Out of memory メッセージが再び表示された場合は、この手順をもう一度繰り返してください。なぜなら、他のヒープのメモリを増やす必要がある可能性があるからです。

メモ: 各アプリケーションで、増やす必要のあるヒープおよびその値は異なります。

コマンドライン フラグ

コマンドライン ビルドで、リンカは次の例のような表を出力します。

Turbo Incremental Link64 6.80 Copyright (c) 1997-2017 Embarcadero Technologies,
Inc.
Overrun on linker heap: info
Linker Heaps
------------
info                   0x12271000  0x12000000
code                   0x0487d000  0x08000000
rodata                 0x00159000  0x06000000
data                   0x029bb000  0x08000000
bss                    0x08000000  0x08000000
dwarf_aranges          0x00010000  0x00200000
dwarf_macinfo          0x00010000  0x00200000
dwarf_pubtypes         0x00275000  0x02000000
dwarf_info             0x04e57000  0x06000000
dwarf_abbrev           0x00040000  0x00200000
dwarf_line             0x0124d000  0x02000000
dwarf_str              0x036e0000  0x06000000
dwarf_loc              0x00070000  0x02000000
dwarf_ranges           0x00275000  0x02000000
Fatal: Out of memory

リンカが使用するヒープ サイズは、-GH フラグを ilink32 または ilink64 に対して使うことで変更できます。 -GH<heapname>=size を使用すると、より大きなヒープまたは複数のヒープを確保することができます。 たとえば、DLL OWLNext ライブラリのリリース版をリンクするために、内部 C++Builder 開発者は -GHinfo=0x13000000 を使用しています。

関連項目