Frage

Ich habe eine Anwendung, dass zuordnet Speicher mit ‚neuen‘ und befreit sie mit ‚Löschen‘ in einigen Teilen des Codes. Das Problem ist, dass, wann immer es die Speichergrenze des Systems übersteigt (sich 2GB sagen), Windows sendet ein Kill-Signal an den Prozess. Ich denke, dass es nicht üblich ist, da sie den Swap-Speicher verwendet werden sollen (ich glaube, in den Fenstern es virtuelle Speicher genannt wird), nicht wahr? Meine Anwendung ist in C ++ / Visual Studio geschrieben.

War es hilfreich?

Lösung

Hier ist, wie Sie es bis zu 3 GB machen kann Verfahren ; Das ist das absolute Maximum Sie es für 32-Bit-Windows-Anwendungen haben können. Noch mehr als das, und Sie gehen zu müssen, eine 64-Bit-Version von Windows verwenden.

Das ist eine Menge Speicher. vielleicht könnten Sie Splitting Ihre Anwendung in mehrere Prozesse berücksichtigen und die Kommunikation zwischen ihnen.

Andere Tipps

Das OS tötet nicht die App, eine nicht behandelte Ausnahme der Fall ist. Sie wollen Ihre App mit perfmon untersuchen, und beobachten Sie diese Zähler, Arbeitssatz, virtuelles Bytes, Privates Bytes. Sie werden Ausnahmen erhalten, wenn Ihre reservierten Bytes der Nähe von 2 GB wird. So Ihr engagiertes Bytes und RAM Bytes sind viel weniger.

Hier ist ein schöner Artikel über virtuellen Adressraum, einschließlich verpflichtet vs vorbehalten.

Die Moral der Geschichte, versuchen Sie nicht zu vergeben, wenn das reservierte Bytes der Nähe von 2 GB wird, für einen 32-Bit-Prozess.

Windows-Signale nicht verwendet werden. Sie sollten die std :: badalloc Ausnahme erhalten, wenn Sie über genügend Arbeitsspeicher ausgeführt werden. Die, wenn sie nicht abgefangene, wird automatisch die terminate () Funktion ausführen. Die Ausnahme ist sichtbar im Ausgabefenster.

Ich habe nicht zu eng an ausgesehen, aber Sie können die Antworten, die Sie hier finden wollen:

können Sie sich einen sehr großen einzelnen Teil des Speichers (> 4 GB) in c oder c ++?

zuteilen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top