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
.