Question

Je vous écris une application c ++ basé qt et je dois être capable de détecter la fragmentation de la mémoire afin de vérifier si le système actuel peut effectivement supporter la charge de la mémoire: le programme charge une grande image (15/21 mégapixels sont la norme) dans la mémoire, puis effectuer un certain filtrage dessus (p / matrices creuses). Par exemple, je vais avoir problème de la fragmentation de la mémoire dans Windows et VMMap a été très utile dans ce: le problème des DLL (tablette Wacom « wintab32.dll » et l'application UltraMon) ne sont pas délocalisables donc fractionnez l'espace d'adressage au 0x10000000-0x30000000 VA du processus.

Je veux fournir à l'application d'une sorte de prise de conscience vers le problème de la fragmentation et de se demander si une approche multi-plateforme (linux / mac / win32) donnant les informations VMMap donne existent déjà.

Était-ce utile?

La solution

Réponse courte: Il n'y a aucun moyen portable.

réponse plus longue: Comment le tas est mis en œuvre et comment il fonctionne est un détail de la mise en œuvre de votre mise en œuvre qui diffère considérablement entre les plates-formes, les bibliothèques std, et les systèmes d'exploitation. Vous devez créer une version différente pour chaque mise en œuvre - à condition, la mise en œuvre vous donne une API pour accrocher en elle. (Ce qui Je pense devrait être le cas pour les trois plates-formes que vous ciblez.)

Autres conseils

Je pense que vous êtes trop pessimiste. 21 millions de pixels, même dans l'hypothèse d'une profondeur de couleur de 16 bits et une alphachannel de taille égale prendrait seulement 168 MB. L'espace d'adressage disponible sur un système 32 bits est mesurée en giga-octets.

Serait-ce faire ce que vous avez besoin?

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

   delete[] tst;
   return true;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top