Вы почти наверняка достигнете предела платформы. Если у вас есть только 32-битное адресное пространство, 4G - это то, на что вы можете надеяться. В действительности это будет намного меньше, поскольку часть адресного пространства будет занята другими вещами.
С 64-битным адресным пространством это может быть возможно, но, как только вы достигнете этого уровня распределения, вы должны спросить себя, действительно ли это необходимо.
Один из способов решения этой проблемы - использовать нехватку памяти, такую как диск, и вносить в память только то, что нужно.
Другими словами, разбить структуру данных на (например) порции по 1 млн. И обрабатывать их по 1 млн. За раз.
Существует множество алгоритмов кэширования, которые вы можете использовать для эффективного выполнения этой задачи в зависимости от моделей использования вашей структуры данных.
Например, для действительно последовательного доступа вы можете иметь один блок в памяти за раз. Для действительно произвольного доступа вам может потребоваться, чтобы в сценарии кэширования было несколько блоков одновременно - каждая структура в памяти хранит как 1 МБ данных, так и свое местоположение в памяти вне памяти, поэтому вы можете использовать алгоритмы LRU и запись грязных данных и т. д.