Existen respuestas, pero es difícil ser general sin conocer los detalles del problema.
Supongo que Windows XP de 32 bits.
Trate de evitar la necesidad de 100s de MB de memoria contigua, si no tiene suerte, algunos dlls aleatorios se cargarán en puntos incontrastables a través de su espacio de direcciones disponible cortando rápidamente áreas muy grandes de memoria contigua. Dependiendo de las API que necesite, esto puede ser bastante difícil de prevenir. Puede ser bastante sorprendente cómo la asignación de un par de bloques de memoria de 400 MB, además de un uso de memoria "normal", puede dejarlo sin lugar para asignar un bloque "pequeño" final de 40 MB.
Por otro lado, preasignar porciones de tamaño razonable a la vez. Del orden de 10 MB más o menos es un buen tamaño de bloque de compromiso. Si puede organizar la partición de sus datos en este tipo de fragmentos de tamaño, podrá llenar el espacio de direcciones de forma razonablemente eficiente.
Si aún se va a quedar sin espacio de direcciones, necesitará poder ingresar y sacar bloques de página en función de algún tipo de algoritmo de almacenamiento en caché. Elegir los bloques correctos para enviar la página va a depender mucho de su algoritmo de procesamiento y necesitará un análisis cuidadoso.
Elegir dónde colocar las cosas es otra decisión. Puede decidir simplemente escribirlos en archivos temporales. También podría investigar la API Extensiones de ventanas de direcciones de Microsoft. En cualquier caso, debe tener cuidado en el diseño de su aplicación para limpiar los punteros que apuntan a algo que está a punto de ser localizado, de lo contrario, cosas realmente malas (tm) sucederán.
¡Buena suerte!
Creo que probablemente quiera evitar la fragmentación y la desfragmentación. –
Mi apuesta es C++, pero eso es cierto: la pregunta no puede responderse mientras no se conozca el "paradigma" subyacente ... – Georgi
Gracias, Douglas, ¡lo corrigí! –