Портативный способ обнаружения фрагментации кучи в С++ во время выполнения?

StackOverflow https://stackoverflow.com/questions/1453568

Вопрос

Я пишу приложение C++ на основе qt, и мне нужно иметь возможность обнаруживать фрагментацию памяти, чтобы проверить, может ли текущая система действительно выдерживать нагрузку на память:программа загружает большое изображение (15/21 мегапикселей является нормой) в память, а затем выполняет над ним некоторую фильтрацию (с разреженными матрицами).Например, у меня проблема с фрагментацией памяти в Windows, и VMMap очень помог в этом:проблема заключалась в том, что некоторые библиотеки DLL (планшет Wacom «wintab32.dll» и приложение UltraMon) не перемещаются, поэтому разделяют адресное пространство на 0x10000000-0x30000000 VA процесса.

Я хочу предоставить приложению некоторую осведомленность о проблеме фрагментации и задаться вопросом, существует ли уже кросс-платформенный (linux/mac/win32) подход, предоставляющий информацию, которую предоставляет VMMAP.

Это было полезно?

Решение

Короткий ответ:Портативного способа не существует.

Более длинный ответ:То, как реализована куча и как она работает, — это деталь реализации вашей реализации, которая сильно различается в зависимости от платформы, стандартных библиотек и операционных систем.Вам придется создать отдельную версию для каждой реализации — при условии, что реализация предоставляет вам API для подключения к ней.(Который Я думаю должно быть справедливо для трех целевых платформ.)

Другие советы

Мне кажется, вы слишком пессимистичны.21 мегапиксель, даже если предположить, что глубина цвета равна 16 битам и альфа-каналу одинакового размера, потребуется всего 168 МБ.Доступное адресное пространство в 32-битной системе измеряется в гигабайтах.

Будет ли это делать то, что вам нужно?

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

   delete[] tst;
   return true;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top