(1) Я не уверен, что вопрос соответствует названию. Если вы размещаете около 2 ГБ ОЗУ в 32-битной Windows, система, вероятно, распределяет много памяти на диск, и именно здесь я бы в первую очередь обратил внимание на замедление. Когда вы используете много памяти, вы должны думать, что она хранится на диске (в pagefile.sys), но кэшируется в физической памяти. Второй может быть быстрее не из-за затрат на выделение ресурсов, а из-за стоимости одновременного использования большого количества памяти. Фактически, когда вы копируете файл в одно большое выделение, вы копируете большую часть его диск-> диск через ОЗУ, затем, когда вы снова запускаете его для анализа, вы снова загружаете копию обратно в ОЗУ. Если ваш анализ представляет собой однопроходный алгоритм, это много лишней работы.
(2) Я думаю, что это mmap файл (MapViewOfFile и друзья в Windows).
Редактировать: (3) предупреждение. Если размер файла в настоящее время составляет 1,8 ГБ, возможно, в следующем году он составит 4 ГБ. Если это так, я бы планировал теперь иметь размер больше 2 ^ 32 на 32-битной машине, что означает либо использование вашего второго варианта, либо еще использование MapViewOfFile, но выполнение одного фрагмента файла разумного размера на время, а не все сразу. В противном случае вы будете пересматривать этот код в первый раз, когда кто-то попробует его на большом файле и сообщит об ошибке.