Russian Qt Forum

Qt => Общие вопросы => Тема начата: cutwater от Сентябрь 18, 2007, 00:19



Название: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 00:19
Доброго времени суток, уважаемые знатоки.

Пишу небольшое приложение на Куте.
Столкнулся с проблемой, что любое приложение, даже очень маленькое жрет около 9-10 метров оперативной памяти.

Вопрос, нельзя ли каким-либо образом оптимизировать приложение, как с этим бороться, да и из-за чего такая загрузка?


Название: Re: Загрузка оперативной памяти
Отправлено: andi от Сентябрь 18, 2007, 05:06
Ох, фигасе!!!
У меня проект (15 форм, и строк там тыщ несколько) жрет 11 метров (это с отладочной инфой!!!).
При таких заявлениях сразу хочется увидеть версию Qt, платформу ну и конечно *.pro
Скорей всего статически линкуете все подряд (да еще с отладочными версиями).


Название: Re: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 09:20
Спасибо за инфу. Вот только не нада таких громких заявлений... я новичек и на куте программирую недавно.

А вообще говорю даже об их екземплах, которые вместе с библиотекой идут.


Название: Re: Загрузка оперативной памяти
Отправлено: spigel от Сентябрь 18, 2007, 11:09
да, размер графической программки в Qt большой - посмотрите на размеры dll, они же целиком в памяти вашей программы располагаются!
при этом разделяемая часть также прибавляется к вашей программе - виртуальная память не обязательно вся в RAM находится!.


Название: Re: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 12:31
Тогда следующий вопрос... тут уже с долей ламерства.

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

(Относительно ОС Windows)


Название: Re: Загрузка оперативной памяти
Отправлено: Tonal от Сентябрь 18, 2007, 12:35
Винда делает это автоматом.


Название: Re: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 12:58
Ничего подобного. Проверял.


Название: Re: Загрузка оперативной памяти
Отправлено: Dodge от Сентябрь 18, 2007, 13:12
Ничего подобного. Проверял.

Ерунду не надо писать, если вы используете динамические библиотеки(не важно как они линкуются к вашему приложению), то windows подгрузит только 1 копию dll, запусти вы хоть миллион копий своего приложения, вопрос в том как вы узнали объем памяти занимаемый вашим приложением, на сколько мне извесно, через стандартные средство вышеуказанной оси, это zделать невозможно. Есть замечательная программа TaskExplorerEX(если не ошибаюсь), вот с помощью нее, вы можете посмотреть объем памяти занимаемый именно вашим "кодом".

З.Ы. Смотреть нада не на вессь процесс, а на ваш модуль в этом процессе.


Название: Re: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 13:37
Прошу прощенья, действительно сказал глупость. В рамках одного процесса длл загружается только один раз... верно, однако не в рамках разных процессов... если уж отойти немного от темы.... как тогда, если я хочу использовать для разных программ одну библиотеку, и загружая ее только раз в программу. Я знаю, что это возможно при помощи технологии СОМ, может есть еще другие способы?


Название: Re: Загрузка оперативной памяти
Отправлено: cutwater от Сентябрь 18, 2007, 13:47
Я думаю я уже сам запутался и не знаю чего мне нада. Большое спасибо всем за помощь, буду дальше читать маны.


Название: Re: Загрузка оперативной памяти
Отправлено: spigel от Сентябрь 18, 2007, 14:17
да, использование COM в некоторых случаях позволит разделить оперативную память вашей программы от библиотечной - так чтобы библиотека не могла использовать ваши адреса для чтения или записи. в большинстве случаев все работает в общей памяти и из-за ошибки в библиотеке падает все.