Domanda

Sto scrivendo un'applicazione qt basata su C ++ e ho bisogno di essere in grado di rilevare la frammentazione di memoria al fine di verificare se il sistema attuale può effettivamente sostenere il carico di memoria: il programma di caricare una grande immagine (15/21 megapixel sono la norma) in memoria e quindi eseguire qualche filtro su di esso (w / matrici sparse). Per esempio, sto avendo problemi di frammentazione della memoria in Windows e VMMap è stato molto utile in questo: il problema era alcune DLL (Wacom tablet "wintab32.dll" e l'applicazione UltraMon) non ottiene delocalizzabili così sono suddividere lo spazio di indirizzamento al 0x10000000-0x30000000 VA del processo.

Voglio fornire l'applicazione con una sorta di consapevolezza verso il problema della frammentazione e si chiede se un cross-platform (Linux / Mac / win32) approccio dando le informazioni VMMap dà già esiste.

È stato utile?

Soluzione

Risposta breve: Non c'è modo portatile.

Più rispondere: come il cumulo è stato attuato e come funziona è un dettaglio di implementazione della vostra implementazione che ampiamente si differenzia tra le piattaforme, biblioteche std e sistemi operativi. Dovrete creare una versione diversa per ogni applicazione - a condizione, l'implementazione fornisce un'API per collegare in esso. (Il che Penso dovrebbe essere il caso per le tre piattaforme come bersaglio.)

Altri suggerimenti

Penso che tu sia troppo pessimista. 21 megapixel, anche assumendo una colordepth di 16 bit e un alphachannel uguale dimensione sarebbe solo 168 MB. Lo spazio di indirizzi disponibili su un sistema a 32 bit viene misurata in gigabyte.

Sarebbe questo fare quello che ti serve?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top