oi,se voce pretende usar C++,voce ainda pode usar vector<>,nao tem como voce alocar mais de 4 gb de memória de uma vez,pelo menos nao em um arquitetura 32..,chama a função maxsize do vector pra ver qual seria o tamanho maximo de alocação que o vector poderia fazer e faz as contas com o tamanho do tipo que vai usar
Pra evitar o resize(dobrado) do container voce pode definir um tamanho fixo pra alocação usando reserve e quando terminar de ler um bloco com o tamanho selecionado em reserve,libera a memória anterior e realoca mais memória para ler a próxima parte do arquivo
Vai ser difícil voce achar uma biblioteca melhor implementada que a STL,os allocators otimizam bem principalmente pra tipos built-in
.
enfim,esse é só o jeito que eu faria,como o rjjj.disse é melhor pesquisar mais
quanto a paginação,em teoria se uma tarefa nao esta precisando de processamento,isso ja é feito automaticamente,então se voce executar uma parte do programa em uma thread e "desligar " essa thread pode ser que a paginação ja seja feita,eu nunca testei isso mas mesmo se funcionasse isso seria muito despendioso..