Как я могу предсказать серьезную проблему фрагментации памяти? - PullRequest
0 голосов
/ 03 февраля 2010

Могу ли я проверить время отказа страницы или что-то еще ..:)

Ответы [ 6 ]

3 голосов
/ 03 февраля 2010

Вы на окнах? Существует Куча с низкой фрагментацией , которая может использоваться в качестве профилактической меры. Это займет всего несколько строк и поможет решить эти проблемы.

Вы используете HeapSetInformation , чтобы установить его. Нечто подобное должно сработать:

ULONG hi = 2;
HeapSetInformation(
    (HANDLE)_get_heap_handle(),
    HeapCompatibilityInformation,
    &hi, sizeof(hi));
3 голосов
/ 03 февраля 2010

Нет глупых вопросов.Если вы беспокоитесь о фрагментации памяти, вам нужно переделать способ распределения памяти, чтобы вы могли отслеживать ее.Возможно, вам следует перегрузить оператор new в тех классах, где вы чувствуете, что фрагментация нанесет наибольший вред.Используйте какую-то функцию ведения журнала, чтобы написать вам, куда все это идет.Этого должно быть достаточно в качестве первого упражнения.Затем, если вы обнаружите, что это действительно наносит вам вред, вы можете создать фрагменты памяти нужного размера, чтобы гарантировать, что ваши элементы выровнены так, как вы хотите.

2 голосов
/ 03 февраля 2010

Если вы используете C ++, я бы не стал пытаться предсказать это. Хорошая вещь, которую дает вам инкапсуляция, состоит в том, что вы можете позже изменить стратегию выделения памяти, не нарушая весь существующий код. Поэтому я бы ничего не делал и не видел, действительно ли фрагментация действительно происходит в реальных обстоятельствах - скорее всего, не будет.

1 голос
/ 03 февраля 2010

AFAIK фрагментация памяти, вероятно, произойдет, когда есть много выделения и освобождения небольших объектов.

Взгляните на Boost.Pool, чтобы предотвратить фрагментацию памяти.

http://www.boost.org/doc/libs/1_41_0/libs/pool/doc/index.html

0 голосов
/ 04 февраля 2010

Ваша фрагментация mem в значительной степени обусловлена ​​структурами данных, которые вы используете, и вашим менеджером памяти.Обычно вы можете предполагать, что любая библиотека, которую вы хотите использовать, будет сильно фрагментирована.Чтобы полностью остановить его, вам нужно использовать структуры данных, которые минимизируют эти проблемы, и стараться избегать ненужного выделения и освобождения данных и, возможно, взяться за сам менеджер памяти.

0 голосов
/ 03 февраля 2010

Признаком фрагментации может служить, например, если ваша система сообщает о том, что у нее 5 МБ свободного места, но вы не можете выделить большие порции (например, 1 МБ) за раз. Это говорит о том, что в вашей системе есть немного свободной памяти, но она была разбита на небольшие несмежные кусочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...