Napisałem konwerter, który pobiera pliki xml openstreetmap i konwertuje je do binarnego formatu renderowania środowiska wykonawczego, który zazwyczaj wynosi około 10% pierwotnego rozmiaru. Rozmiary plików wejściowych są zazwyczaj 3 gb i większe. Pliki wejściowe nie są ładowane do pamięci wszystkie na raz, ale przesyłane strumieniowo jako punkty i polys są gromadzone, a następnie uruchamiany jest plik bsp, a plik jest wyprowadzany. Ostatnio na większych plikach kończy się pamięć i umiera (ten ma 14 milionów punktów i 1 milion wielokątów). Zazwyczaj mój program używa około 1 gb do 1,2 gb pamięci RAM, kiedy tak się dzieje. Próbowałem zwiększyć pamięć wirtualną z 2 do 8 GB (na XP), ale ta zmiana nie przyniosła żadnego efektu. Ponadto, ponieważ ten kod jest open-source chciałbym, aby działał niezależnie od dostępnego RAM (choć wolniejszy), działa na Windows, Linux i Mac.Jak uniknąć wyczerpania pamięci w aplikacji wykorzystującej duże ilości pamięci? C/C++
Jakich technik mogę użyć, aby zabrakło w nim pamięci? Przetwarzanie danych w mniejszych podzestawach, a następnie łączenie wyników końcowych? Korzystasz z mojego własnego programu obsługi typu pamięci wirtualnej? Jakieś inne pomysły?
System Windows może mieć 3 GB przestrzeni wirtualnej z/LARGEADDRESSAWARE –
Flaga umożliwia procesowi użycie do 4 GB *, jeśli system operacyjny może go dostarczyć *. Zwykle system Windows jest wciąż skonfigurowany tak, aby dawał tylko 2 GB dla każdego procesu. Można to zmienić, ryzykując niestabilność kierowcy, aby dać 3GB, tak. Dzięki PAE możesz uzyskać jeszcze więcej. Ale 64-bit to prawdopodobnie lepszy zakład. – jalf
Imho, trzecia opcja jest najważniejsza. Oprócz kontroli nad pamięcią umożliwia także równoległe przetwarzanie. – xtofl