Почему приложения Какао используют так много памяти? - PullRequest
9 голосов
/ 29 марта 2009

Даже стандартное приложение Cocoa с пустым окном, которое создается при создании нового проекта Cocoa в XCode, использует почти 6 МБ памяти. В чем причина этого? Можно ли сократить использование приложения или OS X просто по-разному управляет памятью для приложений Какао?

Не то чтобы я жаловался. Я знаю, что производительность «вряд ли имеет значение больше» (правка: я имею в виду, что она важнее, чем удобочитаемость / удобство обслуживания / время программиста). Мне просто любопытно.

Ответы [ 5 ]

9 голосов
/ 29 марта 2009

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

Вы можете точно проверить, как блоки памяти отображаются, запустив:

sudo vmmap <PID of the process>
4 голосов
/ 29 марта 2009

Зависит от всех используемых вами фреймворков (API). Объедините это с распределением виртуальных машин, выполняемым операциями низкого уровня.

Стоит только попытаться уменьшить выделение кучи (всего), а также размер резидентного кода. Убедитесь, что ваши структуры данных распределены эффективно, и попробуйте скомпилировать с очень известным флагом оптимизации "-Os" (оптимизация размера). Вы мало что можете сделать с виртуальной машиной, которую съела Какао. Я бы не стал беспокоиться об этом.

3 голосов
/ 29 марта 2009

Это явно «WTF» момент для разработчиков в целом. Вопрос обычно в том, почему мое тривиальное приложение использует так много памяти.

Ответ до базовой структуры. Можно утверждать, что 6 МБ - это слишком много, но на самом деле это ничего.

В наши дни компьютеры нередко имеют 2 ГБ памяти. На складе IMAC 4 ГБ. Весь смысл компьютерной индустрии состоит в том, чтобы использовать все ресурсы машины, чтобы она продолжала развиваться.

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

1 голос
/ 26 апреля 2009

Фактор, который не связан напрямую с какао, но в целом применим к платформам, заключается в том, что накладные расходы не являются линейными. Обычно используется фиксированная и переменная «цена», с точки зрения накладных расходов, для использования каркаса.

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

1 голос
/ 29 марта 2009

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

Меня это не касается. Часть памяти может быть возвращена позже, а остальное - цена, которую вы платите за мощный фреймворк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...