Problem mit alloc / Allokierung von Speicher
-
Hallo,
schreibe ein Programm mit Visual C++ und OpenCV (Computer Vision Bibliothek von intel). Ist eine sehr speicherfressende Angelegenheit. Setze, wo immer es geht, Speicher wieder frei. Allerdings kommt es trotzdem zu Abstürzen. (mAlloc, ungenügend Speicherplatz). Virtueller Speicher ist ausreichend gross. Arbeitsspeicher mit 2 GB müsste reichen.
Meine Recherchen haben ergeben, dass Windows 2000 oder XP einer Applikation max. 2 GB Speicher gestatten. Nun, bei meinen Abstürzen zeigt mir mein Task-Manager an, dass momentan um die 1.3GB belegt sind.
Daraus folgere ich, dass physikalisch genug Speicher zur Verfügung steht, dieser allerdings zu fragmentiert ist, so dass nicht genügend Speicher an einem Stück reserviert werden kann.Was kann man da tun ?
Gibt es eine vielleicht Funktion in C++, mit der ich Speicher defragmentieren kann? Oder müsste ich dazu einen Garbage Collector verwenden ?
Bin für jeden Hinweis und Tipp sehr dankbar, weil es für mich sehr wichtig ist. Es geht um meine Masterarbeit und es ist nicht mehr viel Zeit.
Danke
-
brainesic schrieb:
Gibt es eine vielleicht Funktion in C++, mit der ich Speicher defragmentieren kann?
Das kann nicht gehen, weil sich dabei ja zwangsweise alle Pointer ändern. Du könntest entweder einen anderen Speicherallokator ausprobieren (smartheap z.B.) oder auf eine 64Bit-Maschine ausweichen. Das mit dem Garbage Collector wäre sehr kompliziert und würde wahrscheinlich ziemlich viel Umschreibarbeit nach sich ziehen.
-
64-Bit CPU
-
ich glaub man kann auch 3 gb bekommen mit nem speziellen boot-flag. aber das bringts wahrscheinlich auch nicht.
-
Wäre besser mit new und delete zu arbeiten. Die Implementierung in VC++ versucht die Speicherfragmentierung zu vermeiden.
(Geht aber bei vielen kleinen Objekten auf die Performance.)Ansonsten würde ich versuchen meine Datenstruktur so aufzubauchen, dass hintereinander erzeugte Objekte auch zusammen gelöscht werden....