Behandeln von Linker-Fehlern aufgrund nicht ausreichendem Arbeitsspeicher
Nach oben zu Verwenden von ILINK32 und ILINK64 in der Befehlszeile
In bestimmten Situationen könnten die RAD Studio-Linker ILINK32 oder ILINK64 die Fehlermeldung Schwerer Fehler: Zu wenig Arbeitsspeicher ausgeben. Um diesen Fehler zu beheben, müssen Sie den entsprechenden Linker-Heap ermitteln und den Arbeitsspeicher vergrößern.
So vergrößern Sie den Arbeitsspeicher im betreffenden Heap:
1. Wählen Sie Tools > Optionen > IDE > Compilierung und Ausführung aus.
2. Wählen Sie im Menü Ausführlichkeit die Option Diagnose aus, um zu ermitteln, welcher Linker-Heap das Problem verursacht hat.
3. Versuchen Sie erneut zu linken, und klicken Sie auf die Registerkarte Ausgabe, wenn die Meldung Schwerer Fehler: Zu wenig Arbeitsspeicher angezeigt wird. Diese Registerkarte enthält zusätzliche Informationen, die angeben, in welchem Linker-Heap der Überlauf aufgetreten ist.
4. Suchen Sie auf der Registerkarte Ausgabe die folgende Zeile:
Overrun on linker heap:- Der Heap, der nach der Meldung
Overrun on linker heap:angezeigt wird, ist der übergelaufene Heap. - Die Werte für alle Heaps werden nach dieser Zeile aufgeführt. Siehe das Beispiel weiter unten.
- Sehen Sie sich die beiden hexadezimalen Werte nach dem betreffenden Heap an.
-
- Der erste Wert zeigt die für den Linker erforderliche Größe zum Zeitpunkt des Überlaufs des Heap.
- Der zweite Wert zeigt die zugewiesene Größe.
- Vergleichen Sie den ersten mit dem zweiten Wert, und legen Sie für den Heap einen Wert fest, der größer als der erste Wert ist.
![]()
5. Jetzt können Sie die Größe des erforderlichen Heap erhöhen. Wählen Sie dazu Projekt > Optionen > C++-Linker aus, und legen Sie im Abschnitt Heap-Einstellungen des Linkers die neue Heap-Größe fest.
-
- Bei der 32-Bit-Windows-Plattform gibt es 5 Heaps. In den meisten Fällen reicht es aus, 3 davon zu vergrößern: Heap-Größe für Code, Heap-Größe für Daten oder Heap-Größe für Info. Hier sind Beispielwerte aus einem gemeldeten Testfall:
-
- Heap-Größe für Code: 0x14000000
- Heap-Größe für Daten: 0x0d000000
- Heap-Größe für Info: 0x0B000000
- Heap-Größe für RO-Daten: 0
- Heap-Größe für TDS: 0
- Bei der 64-Bit-Windows-Plattform gibt es 14 Heaps. In den meisten Fällen reicht es aus, 2 davon zu vergrößern: Heap-Größe für Dwarf pubtypes oder Heap-Größe für Dwarf aranges. Hier sind Beispielwerte aus einem gemeldeten Testfall:
-
- Heap-Größe für Code: 0
- Heap-Größe für Daten: 0
- Heap-Größe für Dwarf abbrev: 0
- Heap-Größe für Dwarf aranges: 0
- Heap-Größe für Dwarf info: 0
- Heap-Größe für Dwarf line: 0
- Heap-Größe für Dwarf loc: 0
- Heap-Größe für Dwarf macinfo: 0
- Heap-Größe für Dwarf pubtypes: 0x02400000
- Heap-Größe für Dwarf ranges: 0
- Heap-Größe für Dwarf str: 0x08000000
- Heap-Größe für Info: 0
- Heap-Größe für RO-Daten: 0
- Heap-Größe für TDS: 0

6. Versuchen Sie, erneut zu linken. Falls die Meldung Schwerer Fehler: Zu wenig Arbeitsspeicher weiterhin angezeigt wird, wiederholen Sie die obigen Schritte, da Sie vermutlich den Arbeitsspeicher auch für andere Heaps vergrößern müssen.
Befehlszeilen-Flags
Beim Build über die Befehlszeile gibt der Linker eine Tabelle wie die folgende aus:
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
Sie können die vom Linker verwendeten Heap-Größen mit dem Flag -GH für ilink32 oder ilink64 ändern. Verwenden Sie -GH<Heap-Name>=Größe, um einen größeren Heap oder mehrere Heaps festzulegen. Um beispielsweise die Release-Version der DLL OWLNext library (EN) zu linken, verwenden interne C++Builder-Entwickler -GHinfo=0x13000000.