Freeglut, OpenGL und Speicher

8

Ich habe angefangen, OpenGL mit Glew und Freeglut zu üben.

Ich habe eine Frage zu meiner Bewerbung und frage mich, ob jemand auf dasselbe Problem gestoßen ist (falls es eines ist)?

Wenn ich meine Anwendung zum ersten Mal ausführe, beträgt der verwendete Speicher etwa 22.000 KB. Nachdem ich mein Fenster verkleinert und wieder maximiert habe, benötigt es nur noch 2.900-3.300 KB Speicher und fährt fort, dies auch nach Minimierung und Maximierung des Fensters sowie Maus- und Tastatureingabe, während das Fenster den Fokus hat.

Ich frage mich, warum das so ist? Ich weiß nicht viel über FreeGlut und ich frage mich, ob jemand anderes dieses Verhalten bei der Minimierung / Maximierung des Fensters mit FreeGlut bemerkt hat. Oder ist das ein OS-specific Ding?

Es tut mir leid, dass ich es vorher nicht erwähnt habe, aber ich benutze Windows XP SP3 und richte den OpenGL-Kontext mit den folgenden Codezeilen ein:

%Vor%     
SecretStoven 30.08.2013, 09:03
quelle

1 Antwort

4

Dies hängt stark vom Betriebssystem ab und hängt auch davon ab, wie Sie die Speichernutzung messen, aber ich kann Ihnen einen kleinen Einblick geben, warum dies unter Microsoft Windows passieren könnte. Microsoft hat Folgendes zur Speicherbelegung im Benutzermodus in einer Anwendung, die einen WDDM-basierten Treiber verwendet:

  

Vorhandene Spiele und andere Grafikanwendungen weisen häufig virtuellen Speicher für eine Kopie der Videospeicherressourcen zu, die von der Anwendung verwendet werden. Die Anwendung verwendet diese Kopie, um die Anzeige schnell wiederherzustellen, wenn der Inhalt des Videospeichers verloren geht. Beispielsweise verwendet die Anwendung diese Kopie, wenn der Benutzer ALT + TAB drückt oder wenn der Benutzer den Computer in den Standbymodus versetzt. In der Regel verwaltet die DirectX-Laufzeit die Kopie im Namen der Anwendung, wenn die Anwendung eine verwaltete Ressource erstellt. Eine Anwendung kann jedoch auch die Kopie selbst verwalten. Der virtuelle Speicher, den die Kopie verwendet, ist direkt proportional zu den Videospeicherressourcen, die von der Anwendung zugewiesen werden.

Nun, während Microsoft dies als DirectX-Problem beschreibt, gilt es auch für OpenGL. Hinter den Kulissen geht OpenGL in der Regel mit "Device Lost" -Ereignissen völlig transparent um (dies ist nicht Teil von OpenGL selbst, sondern des Fenstersystems - WGL in diesem Fall). Obwohl Sie diese Ereignisse in Ihrer Software in OpenGL 4.x tatsächlich empfangen können, verwenden Sie eine der Robustheitserweiterungen, die Sie normalerweise so vorgeben möchten, als ob sie nicht existieren würden. Jedenfalls vermute ich, dass dies die Schuld ist.

Die Speicherbelegung hängt stark davon ab, wie Sie den Speicherverbrauch Ihrer Anwendung messen, sei es einfach die Anzahl der zugewiesenen virtuellen Speicherseiten (virtuelle Größe) oder die tatsächlichen residenten Seiten (Arbeits- / Resident-Set). Unter Windows, wenn Sie im Task-Manager bei Speicherverbrauch suchen, ist dies normalerweise ein Maß für den Arbeitssatz. Arbeitssatz ist ein sehr vages Konzept und bezieht sich normalerweise auf die Anzahl der Seiten, auf die "kürzlich" verwiesen wurde; Es kann wachsen / schrumpfen, je nachdem, wann es abgetastet wird, unabhängig davon, wie viel Speicher tatsächlich in genau diesem Moment resident ist. Ich würde dies auf das normale Verhalten des Fahrers zurückführen und erkennen, dass diese Erinnerung wahrscheinlich nichts ernsthaft beeinflussen wird.

Wenn Sie auf einer modernen Desktop-64-Bit-Plattform (x86-64) arbeiten, haben Sie tatsächlich einen 48-Bit-Hardware-Adressraum (256 TiB) und das Betriebssystem wird Ihnen einen Bruchteil davon geben (8 TiB unter Windows) ) für einzelne Benutzer-Modus-Prozesse, so 22.000 KiB ist völlig unbedeutend (wenn Sie tatsächlich Ihre Software als 64-Bit kompiliert).

    
Andon M. Coleman 30.08.2013, 13:09
quelle

Tags und Links