accent22 писал(а):Программисты не выставляют флаг IMAGE_FILE_LARGE_ADDRESS_AWARE, который убивает лимит объема потребляемой виртуальной памяти.
Т.е. в boot.ini добавляем "/3GB /userva=xxxx", где хххх - диапазон 2048 - 3072. Например
- Код: выделить все
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS.0="Microsoft Windows XP Professional RU" /execute /fastdetect /3GB /userva=3072
и лимит повышается до 3-гигов. Но, если нет лимита в самом приложении (если есть IMAGE_FILE_LARGE_ADDRESS_AWARE, а у ВН его нет).
Ваша осведомленность за последнее время уже второй раз дает сбой.
VideoNet является LargeAddressAware приложением (ксати, в код при этом добавлять ничего не надо - это опция линкера, которая выставляет соответствующий флаг в PE заголовке exe-файла при его сборке).
Соответственно, при /3gb в boot.ini для Windows XP/Srv2003, либо при bcdedit /set increaseuserva 3072 в Windows 7/Srv2008 он сможет использовать 3GB адресного пространства.
Важно, чтобы операционной системе и загруженным драйверам хватило оставшегося гигабайта. Неоднократно встречал ситуации, когда после такого перераспределения адресного пространства операционка загружалась с "отвалившимися" драйверами видео/рэйда/плат захвата и диагнозом для них "недостаточно ресурсов для загрузки драйвера".
Таким образом, применение данного функционала должно быть обдуманным и учитывать возможные последствия в виде проблем при работе самых различных устройств.
В таких ситуациях для тонкой настройки распределения адресного пространства в Windows XP/Srv2003 имеется дополнительный переключатель "/userva=", где после равно указывается точное кол-во мегабайт адресного пространства, отдаваемое пользовательскому процессу. Аналог этого переключателя в Windows 7/Srv2008 уже изначально предусмотрен при включении перераспределения с помощью bcdedit - "bcdedit /set increaseuserva xxxx", где xxxx - это кол-во мегабайт, выделяемых для пользовательского приложения.
То есть, если при перераспределении адресного пространства в пропорции 3gb/1gb имеются проблемы загрузки/работы драйверов/операционки, то имеет смысл уменьшать количество мегабайт, выделяемых для пользовательского процесса. Иногда устойчивая работа операционной системы достигается только при константе 2048, что сводит на нет телодвижения по перераспределению адресного пространства.
Также на всякий случай хочу отметить: в x64 операционной системе для x86 (32-х разрядного) приложения, являющегося LargeAddressAware, изначально доступно не 2, а 4gb адресного пространства.