Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Место выделенное в ОЗУ для проекта |
Автор: HyugaNeji 13.10.2008, 14:00 |
Привет. У меня возник такой вопрос: Как виндовс определяет какому приложению сколько можно давать места в ОЗУ. Или это зависит от настроек проекта? В смысле: есть у меня прога, которая через рекурсию строит дерево, дерево очень большое , поэтому и памяти жрёт много. Я откомпилил, запустил, у меня проект ро до 98 Мб озу, и завершился нормально. Потом база изменилась, и мне нужно было перестроить дерево заново, но теперь я запускаю проект, а он на 39 Мб озу выдаёт "Out of memory". Я немогу понять что изменилось , и почему виндовс теперь не разрешает использовать больше 39 Мб? ![]() Хэлп плиз ![]() P.S. Я незнал куда надо такой вопрос задавать, подумал что тут самое подходящее место... |
Автор: HyugaNeji 13.10.2008, 15:23 |
Но этот же код ведь работал, я изменил тока пару записей в таблице и всё , и теперь почему то проект не хочет работать ( Я к тому что дело не в алгоритме. |
Автор: mrbrooks 13.10.2008, 15:26 |
рабочий код и хороший, отлаженный код не есть одно и тоже. скорее всего не совсем удачная реализация алгоритма и есть поле для его оптимизации. |
Автор: HyugaNeji 14.10.2008, 09:18 |
Нет, я уже оптимизировал всё что мог.... Так вы не знаете как разрешить для проекта занимать больше памяти? |
Автор: Dem_max 14.10.2008, 10:49 |
Никак, сколько запросишь памяти, столько операционка и даст, если это возможно. Ты сам сказал что ты чтото поменял и чтото перестало работать. Ищи косяк в проге, откатывайся на тот момент когда все работало и ищи тот момент, когда у тебя начинает косячить. |
Автор: Lazin 14.10.2008, 11:38 |
лучше ищи где у тебя выполняется что-то вроде mallock (очень много байт), или new аналогичного содержания |
Автор: ksili 14.10.2008, 16:36 | ||
Когда мне не хватало памяти при выделении (new), Билдер выдавал сообщение 'Stack overflow', ибо память под все неглобальные пременные выделяется в стеке. Сообщение 'Out of memory' мне говорит скорее об обращении куда-то за пределы выделенной памяти или об ошибке какого-нибудь VCL-ного объекта. |
Автор: HyugaNeji 15.10.2008, 08:34 |
Я не менял ничего кроме имени компонента, и пару имён в таблице. И если дело не в размере памяти, то почему мелкие деревья строятся, а большие выдают ошибку? Наверное всё таки дело в размере занимаемой памяти... И спасибо за попытку помочь ) |
Автор: Alca 15.10.2008, 15:59 |
Может мало свободного места на диске? Размер свопа увеличивается автоматом? |
Автор: Adil' 15.10.2008, 17:11 | ||
стандартный, не перегруженный new никогда не выделяет память на стеке, и память, им выделяемая, не имеет никакого отношения к "неглобальные пременные". Stack overflow чаще всего возникает как раз при глубокой рекурсии, когда стек переполняется адресами возврата, передаваемыми через стек параметрами и локальными переменными. А Out of memory - хитрая ошибка, некоторые функции могут её выдавать и при невалидном указателе, переданным в неё как параметр. Тут без ведения подробного лога в файл не обойтись. Тем более, его просто добавить - раз рекурсия. |
Автор: HyugaNeji 16.10.2008, 07:45 |
Ну спасибо. Буду пробывать .... |