Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
In pratica il garbage collector funziona così: al momento dell'allocazione viene aggiunto l'indirizzo di base della memoria allocata a una lista.
Il GC controlla che lindirizzo di base (o indirizzo di base + x appatenente alla memoria allocata) appaia più di una volta. Se appare una sola volta ibera la memoria, poichè l'unica referenza rimasta è quella interna al garbage collector
In questo modo non c'è bisogno di chiamare free (anche se è necessario aspettare un tempo indefinito prima di vedere la memoria rimossa)
Ho.dato.un occhiata.
Ho trovato il sorgente della scansione.
Ma hanno usato cuda.
Per questo e veloce la ricerca...
Il computing di nvidia e velocissimo, credo che con il
Normalissimo uso dalla cpu implicherebbe 10 o 20 volte di più
Il tempo di ricerca che effettua cuda.
Ultima modifica effettuata da Thejuster il 20/01/2016 alle 8:27
Buona sera,
ci sto lavorando da un po' e faccio dei passi avanti..... Ma ora sono bloccato in una situazione "imbarazzante".....
Prima di procedere voglio puntualizzare che il codice trae ispirazione da questo articolo: http://www.codeproject.com/Articles/716227/Csharp-How-to-S ..., le modifiche apportate all' "algoritmo" si basano sul fatto che voglio la memoria accessibile del solo processo corrente, quindi, invece di usare VirtualQueryEx uso VirtualQuery.
Ora.... memoryDescriptor è diverso da NULL, e può cominciare l'esecuzione della parte interessante.
Mi ritrovo in output diversi indirizzi di memoria con dimensioni multiple di 4096 (che suppongo essere la dimensione minima di memoria che un processo più ottenere dal S.O.)
Niente si sbagliato fin qui.... Ma il programma continua a ciclare......
Mi insospettisce il tempo che ci mette a portare a termine il suo compito, quindi metto il debugger in pausa e me lo ritrovo fermo all'esecuzione di VirtualQuery. Ok, nulla di strano, se non fosse che currentMemoryRegion ha valore 0x0213069e7fff0962 e la massima area di memoria utilizzabile dalle applicazione è 0xfffeffff.
0x0213069e7fff0962 è decisamente maggiore di 0xfffeffff e sto trattando ambedue i numeri come interi senza segno di 64 bit, quindi non mi spiego perchè il while fallisca così miseramente e la cpu stabilisca che 0x0213069e7fff0962 è minore di 0xfffeffff !!!
Ciò che viene compilato è questo: while (currentMemoryRegion < (uint64_t)((intptr_t)info.lpMaximumApplicationAddress))
perchè ho un comportamento così bizzarro da parte dell'applicazione?!?!?