Frage

Ich schreibe ein qt-basierten c ++ Anwendung, und ich muss in der Lage sein Speicherfragmentierung, um, wenn das derzeitige System tatsächlich die Speicherauslastung aufrechterhalten kann zu überprüfen, um zu erkennen: das Programm laden, ein großes Bild (15/21 Megapixel sind die Norm) in den Speicher und dann einige Filterung auf sie (w / schwach besetzte Matrizen) auszuführen. Zum Beispiel wurde in dieser sehr hilfreich i Speicherfragmentierung Problem in Windows und VMMap habe: das Problem war, einige DLLs (Wacom-Tablett „wintab32.dll“ und die UltraMon app) nicht so verlegt erhalten werden, um den Adressraum Aufspalten am 0x10000000-0x30000000 VA des Prozesses.

Ich möchte die Anwendung mit irgendeiner Art von Bewusstsein in Richtung der Fragmentierungsproblem schaffen, und frage mich, ob ein Cross-Plattform (Linux / Mac / win32) Ansatz, um die Informationen zu geben VMMap ergibt bereits vorhanden sein.

War es hilfreich?

Lösung

Kurze Antwort: Es gibt keine tragbare Art und Weise.

Lange Antwort: Wie der Heap implementiert ist und wie es funktioniert, ist eine Implementierung Detail Ihrer Implementierung, die zwischen den Plattformen, Standardbibliotheken und Betriebssystemen weit abweicht. Sie werden eine andere Version für jede Implementierung erstellen müssen - vorausgesetzt, die Umsetzung Sie eine API in sie Haken gibt. (Welche Ich denke sollte der Fall für die drei Plattformen, die Sie zielen.)

Andere Tipps

Ich glaube, Sie zu pessimistisch sind. 21 Megapixel, sogar eine colordepth von 16 Bits unter der Annahme und ein gleich großer Alpha-Kanal würde nur 168 MB nehmen. Die zur Verfügung stehende Adreßraum auf einem 32-Bit-System wird in Gigabyte gemessen.

Wäre das tun, was Sie brauchen?

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

   delete[] tst;
   return true;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top