Límites de memoria de Python de 32 bits en ventanas de 64 bits

Estoy teniendo un problema de memoria que parece que no puedo entender.

Estoy en una máquina de Windows 7 de 64 bits con 8 GB de memoria y ejecutando un programa python de 32 bits.

Los programas leen 5,118 archivos comprimidos (npz). Windows informa que los archivos ocupan 1.98 GB en el disco

Cada archivo npz contiene dos datos: 'arr_0' es de tipo np.float32 y 'arr_1' es de tipo np.uint8

La secuencia de comandos de Python lee cada archivo agrega sus datos en dos listas y luego cierra el archivo.

Alrededor del archivo 4284/5118, el programa lanza una excepción de memoria.

Sin embargo, el administrador de tareas dice que el uso de la memoria de python.exe * 32 cuando ocurre el error es 1,854,848K ~ = 1.8GB. Mucho menos que mi límite de 8 GB, o el supuesto límite de 4 GB de un programa de 32 bits.

En el programa detecto el error de memoria e informa: Cada lista tiene una longitud de 4285. La primera lista contiene un total de 1,928,588,480 de float32 ~ = 229.9 MB de datos. La segunda lista contiene 12,342,966,272 datos de uint8 ~ = 1,471.3MB.

Entonces, todo parece estar saliendo. Excepto por la parte donde obtengo un error de memoria. Absolutamente tengo más memoria, y el archivo en el que se bloquea es de ~ 800 KB, por lo que no falla al leer un archivo enorme.

Además, el archivo no está dañado. Puedo leerlo bien, si no uso toda esa memoria de antemano.

Para hacer las cosas más confusas, todo esto parece funcionar bien en mi máquina Linux (aunque tiene 16 GB de memoria en comparación con 8 GB en mi máquina con Windows), pero aún así, no parece ser la memoria RAM de la máquina. causando este problema

¿Por qué Python está lanzando un error de memoria, cuando espero que pueda asignar otros 2GB de datos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta