DmitryKz Цитата: Как Вы это проверили?
как обычно - сначала через все непонятки, с памятью, пришлось пройти.
Вкратце теория (за неточности в формулировках не пинать, просто поправьте):
1. Ограничение Windows, для определённости Windows XP SP2 32bit.
Объём виртуального адресного пространства 4Гб, распределено:
2Гб - user mode (пользовательский режим), 2Гб - kernel mode (режим ядра)
Т.е. приложению (процессу) доступно примерно 2Гб виртуального адресного пространства. Для каждого процесса своё закрытое адресное пространство.
2. У каждой программы (dll-ки и т.п.) есть стартовый адрес (Image Base Address) с которого она должна начать загрузку. Соответственно в адресном пространстве появляются барьеры. При одинаковых у dll (и т.п.) Image Base Address система загружает dll с другого адреса.
3. 7-Zip (и большинство программ) выделяет память непрерывным блоком(-ами).
Берём например Process Explorer
http://download.sysinternals.com/Files/ProcessExplorer.zip И смотрим что подцепилось к процессу, и например в уме считаем какой непрерывный блок самый большой. Смотрим столбец Base (Base Address) адреса указаны в hex:
Пример.
Обвёл основные контрольные точки (остальные нас не интересуют).
0x10000000 (256Мб)
0x36F10000 (879Мб)
0x5B260000 (1458Мб)
879-256=623
1458-879=579
Максимальный размер непрерывного блока 623Мб.