Su Sandboxing un 3rd-party DLL memoria che perde
-
02-10-2019 - |
Domanda
Sto cercando un modo per curare almeno i sintomi di una DLL che perde devo usare. Mentre la biblioteca (OpenCascade) rivendicazioni per fornisce un gestore di memoria, ho come ancora essere in grado di rendere rilascia la memoria è allocata.
vorrei almeno desiderio di mettere le chiamate a questo modulo in una 'sandbox', al fine di mantenere la mia domanda da non perdere la memoria, mentre l'OCC-modulo non è ancora in esecuzione più.
La mia domanda è: mentre mi rendo conto che sarebbe un HACK UGLY (TM) per farlo, è possibile preallocare un tratto di memoria da utilizzare specificamente dalle biblioteche, o per costruire una sorta di sandbox intorno ad esso così posso tenere traccia di quali aree di memoria hanno usato al fine di liberarli me stesso quando ho finito?
O sarebbe che essere quella di un hack brutto e mi dovrebbe cercare di risolvere i problemi in altro modo?
Soluzione
L'unico modo affidabile è quello di separare l'uso della biblioteca in un processo dedicato. Si inizierà questo processo, passare i dati ei parametri ad esso, eseguire il codice della libreria, recuperare i risultati. Una volta che si decide il consumo di memoria non è più tollerabile che si riavvia il processo.
Altri suggerimenti
Utilizzo di una libreria che non è rotto probabilmente sarebbe molto più facile, ma se un ins't sostitutiva si potrebbe provare intercettare le chiamate di allocazione. Se la libreria non è troppo male 'ottimizzato' (in particolare la funzione inlining) si potrebbe smontare e individuare il malloc e funzioni libere; sul caricamento, è possibile sostituire ogni 4 (o 8 su P64 del sistema) sequenza di byte che codifica quell'indirizzo con uno che punti al proprio allocatore di memoria. Questo è quasi garantito per essere un buggy, Timesink illeggibile, però, così non farlo se si può trovare un sostituto di lavoro.
Modifica:
Sega @ risposta di sharptooth, che ha molte più possibilità di lavorare. Mi piacerebbe ancora consiglio cercando di trovare un sostituto però.
Si dovrebbe chiedere il parere di Roman Lygin - aveva l'abitudine di lavoro a occ. Egli ha almeno un post che parla di gestione della memoria http: // opencascade.blogspot.com/2009/06/developing-parallel-applications-with_23.html.
Se chiedete bene, potrebbe anche scrivere un post che spiega internals di mmgt.