Realloc возвращает NULL через некоторое время при выделении небольших (<500KB) блока данных; Есть память ENOUG

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

Вопрос

Привет!

Краткий вопрос: что может быть проблема?

Общее использование памяти моей программы (показано менеджером задач) практически то же самое все время (около 40 минут) он работает, и у меня возле 2g больше бесплатной памяти.

Работает на win2003r2.

Распределение / освобождение памяти достаточно высокое - мне нужно взаимодействовать с другим программным обеспечением, готовим данные для него и удалить его, когда он устарел. Количество блоков данных не является постоянным.

Спасибо!

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

Решение

Как правило, есть только 2 причины, по которым Realloc не удастся

  1. Недостаточно непременно память, чтобы удовлетворить запрос
  2. Коррупция памяти

Несмотря на то, что в вашей программе достаточно общей памяти, чтобы удовлетворить запрос, возможно, не хватает смежных памяти, чтобы сделать это из-за фрагментации. Лучший способ определить, что это необходимо использовать инструмент, который может сообщать о смежных блоках, чтобы определить, доступен ли кто-либо для удовлетворения вашего запроса. Я считаю, что один из инструментов в пакете Sysinternals делает это.

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

Без кода, чтобы посмотреть, все, что я могу дать вам обходной путь.

Пытаться reallocВ памяти только тогда, когда вам нужно, чтобы она расти, и удвоить его по размеру вместо того, чтобы просто добавить, однако многие байты, которые вам нужны. Это чрезвычайно помогает с фрагментацией. Поскольку вы сказали, что у вас достаточно памяти, не беспокойтесь о том, чтобы освободить его, когда вы закончите, просто держите его там, если это достаточно разумно.

Сделайте это своей целью уменьшить фрагментацию на любую себестоимость, сохраняя рабочий набор 200 МБ, кажется, идеально подходит для меня на сегодняшнюю вычислительную мощность. Если вы часто проходите в течение 500 МБ, и ваша программа работает в течение длительных периодов времени, вы можете начать смотреть на оптимизацию рабочего набора дальше, но до тех пор не беспокойтесь об этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top