Limity 32-bitowej pamięci Pythona na 64-bitowych oknach

Mam problem z pamięcią, którego chyba nie rozumiem.

Jestem na komputerze z systemem Windows 7 64 bit z 8 GB pamięci i uruchomionym 32-bitowym programem Pythona.

Programy odczytują 5118 skompresowanych plików numpy (npz). Windows informuje, że pliki zajmują 1,98 GB na dysku

Każdy plik npz zawiera dwie części danych: „arr_0” jest typu np.float32, a „arr_1” jest typu np.uint8

Skrypt Pythona odczytuje każdy plik dołączając swoje dane do dwóch list, a następnie zamyka plik.

Wokół pliku 4284/5118 program zgłasza wyjątek MemoryException

Jednak menedżer zadań mówi, że użycie pamięci python.exe * 32, gdy wystąpi błąd, wynosi 1 848 848 K ~ = 1,8 GB. Znacznie mniej niż mój limit 8 GB lub przypuszczalny limit 4 GB programu 32-bitowego.

W programie łapię błąd pamięci i raportuje: Każda lista ma długość 4285. Pierwsza lista zawiera łącznie 1.928.588.480 ~ float32 = 229,9 MB danych. Druga lista zawiera 12 342 966 272 danych uint8 = 1 471,3 MB danych.

Wszystko wydaje się sprawdzać. Z wyjątkiem części, w której pojawia się błąd pamięci. Mam absolutnie więcej pamięci, a plik, na którym się zawiesza, ma ~ 800 KB, więc nie zawodzi w czytaniu dużego pliku.

Ponadto plik nie jest uszkodzony. Czytam to dobrze, jeśli wcześniej nie wykorzystam całej pamięci.

Aby sprawić, że wszystko będzie bardziej mylące, wszystko to wydaje się działać dobrze na moim komputerze z Linuksem (chociaż ma 16 GB pamięci, a nie 8 GB na moim komputerze z Windows), ale nadal nie wydaje się, aby była to pamięć RAM maszyny. powodując ten problem.

Dlaczego Python zgłasza błąd pamięci, gdy oczekuję, że powinien być w stanie przydzielić kolejne 2 GB danych?

questionAnswers(1)

yourAnswerToTheQuestion