Python 32-Bit-Speicherbeschränkungen in 64-Bit-Fenstern

Ich bekomme ein Speicherproblem, das ich anscheinend nicht verstehe.

Ich arbeite auf einer Windows 7 64-Bit-Maschine mit 8 GB Arbeitsspeicher und einem 32-Bit-Python-Programm.

Das Programm liest 5.118 gezippte Numpy-Dateien (npz). Windows meldet, dass die Dateien 1,98 GB Festplattenspeicher belegen

Jede npz-Datei enthält zwei Daten: 'arr_0' ist vom Typ np.float32 und 'arr_1' ist vom Typ np.uint8

Das Python-Skript liest jede Datei und fügt ihre Daten in zwei Listen ein. Anschließend wird die Datei geschlossen.

Um die Datei 4284/5118 löst das Programm eine MemoryException aus

Der Task-Manager gibt jedoch an, dass die Speichernutzung von python.exe * 32 bei Auftreten des Fehlers 1,854,848 KB ~ = 1,8 GB beträgt. Viel weniger als meine 8 GB-Grenze oder die angebliche 4 GB-Grenze eines 32-Bit-Programms.

Im Programm fange ich den Speicherfehler ab und es wird gemeldet: Jede Liste hat eine Länge von 4285. Die erste Liste enthält insgesamt 1.928.588.480 float32s ~ = 229,9 MB Daten. Die zweite Liste enthält 12.342.966.272 uint8s ~ = 1.471,3 MB Daten.

Also scheint sich alles auszuchecken. Mit Ausnahme des Teils, bei dem ich einen Speicherfehler erhalte. Ich habe absolut mehr Speicher, und die Datei, auf der es abstürzt, ist ~ 800KB, so dass es beim Lesen einer riesigen Datei nicht fehlschlägt.

Außerdem ist die Datei nicht beschädigt. Ich kann es gut lesen, wenn ich vorher nicht den ganzen Speicher verbrauche.

Um die Sache noch verwirrender zu machen, scheint all dies auf meinem Linux-Rechner gut zu funktionieren (obwohl er 16 GB Arbeitsspeicher hat im Gegensatz zu 8 GB auf meinem Windows-Rechner), aber es scheint immer noch nicht der Arbeitsspeicher des Rechners zu sein verursacht dieses Problem.

Warum löst Python einen Speicherfehler aus, wenn ich davon ausgehe, dass es weitere 2 GB Daten zuordnen kann?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage