À la recherche de fuites de mémoire, j'ai utilisé MemProof et pu voir en direct les comptes des ressources utilisées, créées et détruites. Après avoir exécuté mon programme pendant plus d'un jour et demi, j'ai remarqué que tout le reste étant constant ou moins, la mémoire virtuelle (VM) augmente en nombre. Elle a commencé à 109 et maintenant elle est à 113 après 24 heures.
Voici ce que MemProof dit pour chaque fuite de VM:
VirtualAlloc(adresse_emplacement, 16384, 4096, 4); Il est identifié comme Mémoire Virtuelle et sa taille est toujours de 16384. Le nom de l'API est VirtualAlloc. Le module est kernel32.dll.
De plus, memproof indique, "virtualalloc réserve ou s'engage dans une région de pages dans l'espace d'adressage virtuel du processus appelant. Les pages allouées doivent être libérées avec virtualFree lorsqu'elles ne sont plus nécessaires."
La fuite de VM est associée à une fonction dans le fichier System.Pas.
La fonction est la suivante:
function GetCmdShow: Integer;
var
SI: TStartupInfo;
begin
Result := 10; { SW_SHOWDEFAULT }
GetStartupInfo(SI);
if SI.dwFlags and 1 <> 0 then { STARTF_USESHOWWINDOW }
Result := SI.wShowWindow;
end; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
J'ai les signes inférieurs pointant sur le mot clé "end" là où Memproof me conduit lorsque je clique sur la ou les fuites de mémoire virtuelle(s).
Alors, que cela signifie-t-il?