メモリ不足エラーの処理
コマンドラインでの 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つ目の値を超えているヒープの値を見つけます。
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
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
を使用しています。