Gestion des erreurs de mémoire insuffisante
Remonter à Utilisation de ILINK32 et ILINK64 en ligne de commande
Lorsque vous utilisez le lieur ILINK32 ou ILINK64 de RAD Studio, vous obtenez le message Fatal: Out of memory. Pour remédier au problème, vous devez identifier le tas du lieur qui est en manque de mémoire et augmenter sa taille.
Pour augmenter la taille de la mémoire du tas concerné, procédez comme suit :
1. Accédez à Outils > Options > EDI > Compilation et exécution.
2. Pour voir quel tas du lieur est à l'origine du problème, sélectionnez Diagnostic dans le menu Verbosité.
3. Tentez à nouveau d'utiliser le lieur, et Lorsque vous obtenez le message Fatal: Out of memory, cliquez sur l'onglet Sortie. Il contient des informations supplémentaires qui identifient le tas du lieur en dépassement de mémoire.
4. Dans l'onglet Sortie, trouvez la ligne suivante :
Overrun on linker heap:
- Le tas que vous voyez après l'affichage du message
Overrun on linker heap:
est le tas concerné par le dépassement de mémoire. - Les valeurs relatives à l'ensemble des tas sont listées sous cette ligne. Reportez-vous à l'exemple #Indicateurs de la ligne de commande ci-dessous.
- Examinez les deux valeurs hexadécimales suivant le nom du tas en dépassement.
-
- La première valeur indique la taille requise par le lieur au moment où il réalise que le tas va être dépassé.
- La seconde valeur indique la taille allouée.
- Comparez la première et la deuxième valeurs et choisissez une valeur dépassant la première valeur.
5. Maintenant, vous pouvez augmenter la taille du tas concerné par le dépassement. Pour cela, accédez à Projet > Options > Lieur C++, puis dans la section Paramètres du tas du lieur, indiquez la nouvelle taille du tas.
-
- Sur la plate-forme Windows 32 bits, cinq tas sont disponibles. Dans la plupart des cas, il vous suffit d'augmenter trois d'entre eux. Taille du tas du code, Taille du tas des données ou Taille du tas Info. Reportez-vous aux valeurs exemple utilisées dans un cas de test signalé :
-
- Taille du tas du code : 0x14000000
- Taille du tas des données : 0x0d000000
- Taille du tas Info : 0x0B000000
- Taille du tas des données RO : 0
- Taille du tas TDS : 0
- Sur la plate-forme Windows 64 bits, quatorze tas sont disponibles. Dans la plupart des cas, il vous suffit d'augmenter deux d'entre eux. Taille du tas Pubtypes Dwarf ou Taille du tas Aranges Dwarf. Reportez-vous aux valeurs exemple utilisées danss un cas de test signalé :
-
- Taille du tas du code : 0
- Taille du tas des données : 0
- Taille du tas Abbrev Dwarf : 0
- Taille du tas Aranges Dwarf : 0
- Taille du tas Info Dwarf : 0
- Taille du tas Line Dwarf : 0
- Taille du tas Loc Dwarf : 0
- Taille du tas Macinfo Dwarf : 0
- Taille du tas Pubtypes Dwarf : 0x02400000
- Taille du tas Ranges Dwarf : 0
- Taille du tas Str Dwarf : 0x08000000
- Taille du tas Info : 0
- Taille du tas des données RO : 0
- Taille du tas TDS : 0
6. Effectuez une nouvelle tentative de liaison. Si vous obtenez à nouveau le message Fatal: Out of memory, répétez la procédure car vous devrez peut-être augmenter la mémoire d'autres tas.
- Remarque : Chaque application requiert d'augmenter différents tas et différentes valeurs.
Indicateurs de la ligne de commande
En cas de construction en ligne de commande, le lieur émettra un tableau similaire à celui obtenu dans l'exemple suivant :
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
Vous pouvez modifier les tailles de tas utilisées par le lieur via l'indicateur -GH pour les lieurs ilink32 ou ilink64. Utilisez -GH<heapname>=size
pour allouer plusieurs tas ou un tas plus grand. Par exemple, pour lier la version de release de la bibliothèque OWLNext (DLL OWLNext library (EN)), nos développeurs C++Builder internes utilisent -GHinfo=0x13000000
.