Datenstruktur zum speichern riesige Menge von Daten?

In meiner Anwendung,ich habe zum laden volumedata aus einer Reihe von Bildern (MRC-Bilder) und halten Sie die pixel-Daten im Speicher.(Bilder sind grayscaled ,also ein byte pro pixel).

Meine Entwicklungsumgebung framework QT ,MinGW für Windows und GCC für Linux.

Im moment verwende ich eine einfache Datenstruktur zum speichern von volumedata als :

unsigned char *volumeData;

und eine riesige Verteilung wie folgt.

volumeData=new unsigned char[imageXsize * imageYsize * numofImages];

Folgenden sind die wichtigsten Methoden zum Zugriff auf Bild-Daten in einer bestimmten Ebene,wie

unsigned char* getXYPlaneSlice(int z_value);
unsigned char* getYZPlaneSlice(int x_value);
unsigned char* getZXPlaneSlice(int y_value);

Mit meiner einfachen Daten-Struktur, es war einfach zu implementieren, die oben genannten Methoden.

Aber könnten wir annehmen müssen, um zu der volume-Größe als 2000x2000x1000 (~3.7 Gb) in die Zukunft.Und aktuelle datastructure nicht in der Lage sein zu handhaben, dass große Datenmengen.

  1. Wie eine Zersplitterung zu vermeiden ? Jetzt,auch mit 1000x1000x200 Daten -, Anwendungs-crash geben bad_alloc.
    Was ist der beste Weg, um das datastructure für diese ? soll ich so etwas wie verkettete Liste, die jeder chunk ist mit der Größe 100 MB.

  2. Zudem,Benutzer sollten in der Lage sein, um perfome einige Bild-processing-Filter auf volume-Daten und sollten auch in der Lage sein, einen reset auf original-pixel-Wert.
    Das heißt, ich sollte halten Sie zwei Kopien von volume-Daten.
    Mit aktuellen implemetation wie seine.

    unsigned char *volumeDataOriginal;

    unsigned char *volumeDataCurrent;

Also mit 2000x2000x1000 Daten-Bereich, sein gehen, nutzen über 8 GB (4 GB für jedes volume).
Aber in der Win32-der Adressraum beträgt 4GB.Wie bewältigen Sie diese ? Ich sollte gehen mit 64bit-Anwendung ?

BEARBEITEN :
Hier ist ein Schnappschuss von meiner Anwendung Datenstruktur zum speichern riesige Menge von Daten?

Grundsätzlich lade ich die Lautstärke-Daten (aus einer Reihe von Bildern,von MRC-format..etc), und zeigen Sie in verschiedenen Flugzeug-Zuschauer (XY,YX,YZ.Bild zeigt die XY-Ebene-viewer).Ich brauche, um oben 3-Daten-Zugriffs-Methoden zu zeigen, ein Bild in einer bestimmten Ebene.mit Schieberegler-bar kann der Benutzer ändern das Bild zu zeigen, in der ausgewählten Ebene)

Vielen Dank im Voraus.

  • Möchten Sie vielleicht zu erkunden, das Fliegengewicht design-pattern und greifen das problem auf einer höheren Ebene. Die Absicht ist es, "Nutzen-sharing zu unterstützen eine große Anzahl von feinkörnigem Objekte effizient."
  • Was machst du mit diesem riesigen Speicher chunk? Wie hat sich der user interagieren? Es ist schwer zu sagen, aus Ihrer aktuellen Beschreibung, ob die Bildqualität beeinträchtigt werden kann, ob der gesamte Inhalt hat, sich in Erinnerung zu allen Zeiten etc.
  • Man könnte auch überlegen, Address Windowing Extension: msdn.microsoft.com/en-us/library/aa366527(VS.85).aspx
  • hier ist ein Schnappschuss von der Anwendung , i.imgur.com/tABMP.png . Ganz einfach es gibt 3 Flugzeug-Viewer für jeden einzelnen Ebene XY,YZ,ZX und Benutzer erkennen, die Zellrahmen mit Kontur-Erkennung von algorithmen.Und anwenden von Bild-processing-Filter, wenn er will.
  • meine Anwendung sollte ausgeführt werden, auf Windows,Linux und Mac.So könnte ich etwas brauchen, Multiplattform.
Schreibe einen Kommentar