Если входные данные во втором файле нужны только один раз (поскольку они читаются), вы можете сократить использование памяти пополам.
В зависимости от вашего алгоритма, вы можете даже держать открытыми как файловые дескрипторы, так и небольшой хэш неиспользуемых пока еще значений в памяти. Примером может служить слияние или сравнение отсортированных данных - вам нужно только удерживать текущую строку из каждого файла и сравнивать ее друг с другом по мере продвижения, пропуская до тех пор, пока cmp
не изменится.
Другой подход может состоять в том, чтобы сделать несколько проходов, особенно если на вашем компьютере установлено одно или несколько ядер, которые в противном случае простаивают. Открытые каналы чтения и подпроцессы передают вам данные в виде управляемых предварительно организованных блоков.
Для более общих алгоритмов вы можете не платить за объем памяти, обменивая ее на стоимость скорости диска.
В большинстве случаев загрузка каждого источника данных в память выигрывает только во время разработки - тогда вы платите за это в размере и / или скорости, когда N становится большим.