Есть ответы, но сложно быть общим, не зная деталей проблемы.
Я предполагаю, что 32-битная Windows XP.
Старайтесь не тратить 100 МБ непрерывной памяти, если вам не повезло, несколько случайных dll загрузятся в неудобных точках через доступное адресное пространство, быстро сокращая очень большие области непрерывной памяти. В зависимости от того, какие API вам нужны, это может быть довольно сложно предотвратить. Может быть весьма удивительно, как простое выделение пары 400 МБ блоков памяти в дополнение к некоторому «нормальному» использованию памяти может оставить вас некуда выделить окончательный «маленький» 40 МБ блок.
С другой стороны, предварительно выделяйте куски разумного размера за раз. Примерно 10 МБ или около того - хороший размер компромиссного блока. Если вам удастся разделить данные на куски такого размера, вы сможете достаточно эффективно заполнить адресное пространство.
Если вам все еще не хватает адресного пространства, вам понадобится иметь возможность вставлять и выводить блоки страниц на основе какого-либо алгоритма кэширования. Выбор правильных блоков для постраничного вывода во многом будет зависеть от вашего алгоритма обработки и потребует тщательного анализа.
Выбор места для вывода страниц - другое решение. Вы можете решить просто записать их во временные файлы. Вы также можете изучить API Microsoft Window Addressing Extentions. В любом случае вам нужно быть осторожным в дизайне своего приложения, чтобы очистить любые указатели, указывающие на что-то, что должно быть выгружено, иначе произойдут действительно плохие вещи (tm).
Удачи!