He escrito un convertidor que toma los archivos xml de openstreetmap y los convierte a un formato de renderizado de tiempo de ejecución binario que es típicamente alrededor del 10% del tamaño original. Los tamaños de los archivos de entrada suelen ser de 3gb o más. Los archivos de entrada no se cargan en la memoria de una sola vez, sino que se transmiten a medida que se recopilan puntos y polis, luego se ejecuta una bsp y se genera el archivo. Recientemente en archivos más grandes se queda sin memoria y muere (el que está en cuestión tiene 14 millones de puntos y 1 millón de polígonos). Por lo general, mi programa usa de 1 gb a 1.2 gb de memoria RAM cuando esto sucede. Intenté aumentar la memoria virtual de 2 a 8 GB (en XP) pero este cambio no tuvo efecto. Además, dado que este código es de código abierto, me gustaría que funcione independientemente del RAM disponible (aunque sea más lento), que se ejecuta en Windows, Linux y Mac.¿Cómo evitar quedarse sin memoria en la aplicación de uso de memoria alta? C/C++
¿Qué técnicas puedo usar para evitar que se quede sin memoria? ¿Procesar los datos en subconjuntos más pequeños y luego fusionar los resultados finales? ¿Utilizo mi propio tipo de controlador de memoria virtual? ¿Alguna otra idea?
Windows puede tener 3 GB de espacio virtual con/LARGEADDRESSAWARE –
El indicador permite que el proceso use hasta 4 GB * si el sistema operativo puede proporcionarlo *. Normalmente, Windows todavía está configurado para dar solo 2GB a cada proceso. Eso también se puede cambiar, a riesgo de inestabilidad del controlador, para darte 3GB, sí. Con PAE, puede obtener aún más. Pero 64-bit es probablemente una mejor apuesta. – jalf
Imho, la tercera opción es la más importante. Además de dar control sobre la memoria, también permite el procesamiento paralelo. – xtofl