Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Место выделенное в ОЗУ для проекта


Автор: HyugaNeji 13.10.2008, 14:00
Привет.

У меня возник такой вопрос:

Как виндовс определяет какому приложению сколько можно давать места в ОЗУ. Или это зависит от настроек проекта?

В смысле: есть у меня прога, которая через рекурсию строит дерево, дерево очень большое , поэтому и памяти жрёт много. Я откомпилил, запустил, у меня проект ро до 98 Мб озу, и завершился нормально.
Потом база изменилась, и мне нужно было перестроить дерево заново, но теперь я запускаю проект, а он на 39 Мб озу выдаёт "Out of memory".

Я немогу понять что изменилось , и почему виндовс теперь не разрешает использовать больше 39 Мб? smile 

Хэлп плиз  smile 

P.S.  Я незнал куда надо такой вопрос задавать, подумал что тут самое подходящее место...

Автор: Lazin 13.10.2008, 14:39
Цитата(HyugaNeji @  13.10.2008,  14:00 Найти цитируемый пост)
Я немогу понять что изменилось , и почему виндовс теперь не разрешает использовать больше 39 Мб

нужно уточнять версию windows, 32х битная ОС windows позволяет процессу использовать до 2х Гб
в VCL, некоторые компоненты имеют собственные ограничения, на используемую память, возможно вам стоит пересмотреть свой алгоритм, или отказаться от VCL

Автор: HyugaNeji 13.10.2008, 15:23
Но этот же код ведь работал, я изменил тока пару записей в таблице и всё , и теперь почему то проект не хочет работать ( Я к тому что дело не в алгоритме. 

Автор: mrbrooks 13.10.2008, 15:26
Цитата(HyugaNeji @  13.10.2008,  15:23 Найти цитируемый пост)
Но этот же код ведь работал

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

Автор: 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
Цитата(Lazin @  14.10.2008,  15:38 Найти цитируемый пост)
лучше ищи где у тебя выполняется что-то вроде mallock (очень много байт), или new аналогичного содержания

Когда мне не хватало памяти при выделении (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
Цитата(ksili @  14.10.2008,  16:36 Найти цитируемый пост)
Когда мне не хватало памяти при выделении (new), Билдер выдавал сообщение 'Stack overflow',

стандартный, не перегруженный new никогда не выделяет память на стеке, и память, им выделяемая, не имеет никакого отношения к "неглобальные пременные". Stack overflow чаще всего возникает как раз при глубокой рекурсии, когда стек переполняется адресами  возврата, передаваемыми через стек параметрами и локальными переменными.

А Out of memory - хитрая ошибка, некоторые функции могут её выдавать и при невалидном указателе, переданным в неё как параметр.
Тут без ведения подробного лога в файл не обойтись. Тем более, его просто добавить - раз рекурсия.

Автор: HyugaNeji 16.10.2008, 07:45
Ну спасибо. Буду пробывать ....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)