Funtic Опубликовано 9 марта, 2008 Поделиться Опубликовано 9 марта, 2008 Дело в том, что WM5/6 так устроены что однажды загруженная DLL в каком-то процессе занимает адрессное пространство во ВСЕХ процессах. Конечно, эта DLL не отображается во все процессы, но вот в те же адреса другя DLL из другого процесса уже не загрузится. Объясняю почему это плохо: Каждый процесс имеет максимальное адресное пространство 32МБ, так называемый SLOT0. Исключения составляют лишь адреса отображаемых в память файлов данных - они располагаются выше 64мб. Но данные файлы не имеют значения, поскольку они не сильно влияют на расход оперативки. Итак, для каждого процесса мы имеем максимум 32мб. Вроде бы выглядит замечательно, не так ли? А теперь ковшики дёгтя: 1) от четверти до половины этих 32метров заняты модулями системы, которые не уместились в SLOT1. Это адрессное пространство не может быть занято ничем более. Например, на типичном 3G телефоне это почти 10метров. Остается уже 22метра. едем дальше. 2) однажды загруженная в каком-то одном процессе DLL, будет занимать данные адреса во ВСЕХ процессах. Даже в тех, где она не используется. Исходя из этого принципа, если какой-то процесс запросит память для данных, то эта область тоже выпадает из адресного пространства ВСЕХ других процессов. То есть в этих 22метрах должны будут разместится все запущенные процессы как буд-то они - всего лишь один процесс. Тут мы подходим к интересному заключению - на WM5/6 нет как таковой виртуальной памяти. Все процессы сидят в одном фактически одном адрессном пространстве. Исключение составляют лишь EXE файлы. Вот они сидят как раз в одних адресах, но каждый в своем физическом пространсве ОЗУ. То есть фактически имея кучу ОЗУ, мы запросто можем получить сообщение о нехватки памяти из-за того что банально адресного пространства не хватило. Все данные и DLL могут находится только в первых 32метрах - это ограничение WM5/6. Никакими 128 и 256 метрами ОЗУ эту границу не подвинуть. Вопрос: а куда же тогда тратятся эти 128метров? Ну в WM6 появилось понятие SLOT63 - туда загружаются DLL в которых только ресурсы (например, MUI файлы). Этим самым нижние 32метра разгрузились немного. Также дополнительная память может заниматься ядром под всякие фрэймбуфферы, пулы. Да, это даст немного больше ОЗУ в 32метрах поскольку системе уже не нужно забирать память оттуда. Но фактически из тех дополнительных 64метров будет задействовано, дай Бог, 32метра. и 32 метра будут висеть балластом и числится как свободные в диспетчере памяти и радовать глаз пользователя. Только занять их не сможет ни одно приложение. Всё это к тому я расписал, что 128метров ОЗУ не решат проблемы нехватки памяти. Это даст небольшой выигрыш, скажем метра в 4 чистой памяти - не больше. 128метров ставят чисто из маркетинговых соображений. Ну кто будет задумываться о распределении памяти? Да почти никто. Зато в спеках будет красоваться 128мб. вообщем, не всё то золото, что блестит Нужно ждать WM7. Если эта версия будет базироваться на WinCE6, то вот с нее прорыв в развитии КПК и начнется. Там ОЗУ гигабайтами можно ставить и юзать его полностью. Ну а пока реального выигрыша от 128 метров нет. Можно надеятся что в будущем будет апдэйт до WM7 и можно будет заюзать все 128метров. Вот только девайс этот уже морально устареет и на фоне новых с 256/512/1024 ОЗУ будет смотреться фигово. вот что меня добивает - это то что производители жмуться на нормальный размер встроенного флэша. MicroSD уже 8GB есть. А ведь если отбросить область контакных площадок, то размеры получаться чуть ли не меньше той флэшки (MSystem DOC) что в коммуникаторах ставятся. Стоимость 2ГБ MicroSD сейчас вообще копейки! Как производителям не стыдно ставить 128/256метров в наши дни - непонятно... Мне бы очень хотелось запихать все проги, включая игрухи на встроенную флэшку, а карту памяти юзать только для мультмедии: фотки, музыка, видео и прочее, что можно менять без потери функционала. Взято с форума ASUSa Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения