memory allocation failed
От: Jaakko Беларусь  
Дата: 18.07.08 09:44
Оценка: :)
Доброго времени суток. Извините, если тема немного несоответствует разделу, но не знаю, куда бы она лучше подошла..
У меня возникла следующая интересная проблема.
В проекте для генерации базы, используются сторонние программы, написанные на C++ в Visual C++ 6.0. Исходных кодов

этих программ нет.
Эти программы генерируют конечный детерминированный автомат из файла, который содержит слова. Всё было хорошо, пока

слов было не много (~400к), однако при увеличении до ~1.5м слов, одна из программ стала вылетать, выдавая ошибку

"memory allocation failed".
Дизассемблировав exe'шник, выяснил, что данную ошибку могут выдавать ф-и malloc, calloc и realloc. Те, программе не

хвататет размера кучи(heap'а). Попробовал увеличить размер свопа — не помогло. Открыл task manager и посмотрел, как

используется память при работе этой программы.. 2Гб памяти(всё, что есть) съедаются полностью, вместе со свопом,

съедается около 3Гб.
Первое разумное решение — добавить оперативной памяти, но сейчас это вряд ли удастся.
Вопрос такой, есть ли программы, способы, с помощью которых можно заставить конкретную программу работать с жёстким

диском вместо кучи? Не важно, что упадёт производительность.
Или, может быть, подскажите другие варианты решения этой проблемы?
Re: memory allocation failed
От: Nik_1 Россия  
Дата: 18.07.08 10:12
Оценка: +1
Размер адресного пространства в 32битной винде — 2Гб, т.е. больше 2Гб мапяти ты юзать не сможешь, даже если физически ее будет больше. В вин 2003 можно это значение увеличить до 3Гб.
Как вариант, распаралелить работу с данными, разнеся ее на несколько процессов. Тогда каждый запущенный процес сможет юзать по 2Гб адресного пространства.
Re: memory allocation failed
От: remark Россия http://www.1024cores.net/
Дата: 18.07.08 11:07
Оценка:
Здравствуйте, Jaakko, Вы писали:

J>съедается около 3Гб.


Можно попробовать увеличить размер виртуального адресного пространства процесса с 2Гб до 3Гб:
http://msdn.microsoft.com/en-us/library/ms791558.aspx
http://technet.microsoft.com/en-us/library/bb124810.aspx


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: memory allocation failed
От: Джо  
Дата: 18.07.08 12:51
Оценка:
> Исходных кодов этих программ нет.

Это кстати мало отностится к С++.

Если съедается все адресное пространство (2 или 3 Гб) и приложения
32-битные, то вряд ли что-то можно сделать. На 64-битной винде адресного
пространства будет больше, но 32-битных приложений это не касается. Однако
для одного приложения доступной памяти может быть больше, так что можно
попробовать — сделать виртуальной памяти гигов на 6.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: memory allocation failed
От: Jaakko Беларусь  
Дата: 18.07.08 14:01
Оценка:
Здравствуйте, remark, Вы писали:


R>Можно попробовать увеличить размер виртуального адресного пространства процесса с 2Гб до 3Гб:

R>http://msdn.microsoft.com/en-us/library/ms791558.aspx
R>http://technet.microsoft.com/en-us/library/bb124810.aspx

спасибо за идею, но не помогло, такое ощущение, что это никак не сказалось на работу программы.
Re[2]: memory allocation failed
От: Jaakko Беларусь  
Дата: 18.07.08 14:02
Оценка:
Здравствуйте, Джо, Вы писали:

Джо>так что можно попробовать — сделать виртуальной памяти гигов на 6.


делал, но не помогло
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.