2017-02-12 9 views
2

Wenn ich meine Anwendung in Visual Studio 2015 renne ich in den Diagnose-Tool zu sehen, dass der Prozess Speicher auf 2 GB stecken - als ob es eine Grenze war:Visual Studio 2015: Erhöhung Prozessspeicher

Diagnostic

Ich lese, dass die Ausführung für x32 den verfügbaren Speicher begrenzt, so dass es notwendig ist, x64 zu verwenden. Also baue ich relase, x64 was mir das oben gezeigte Ergebnis gibt. Wie kann ich dieses "Limit" entfernen?

Hinweis: Ich habe 16 GB Ram-Hardware (OS: Windows 10).

+1

Wenn Sie für x64 erstellen, gibt es kein Speicherlimit. Überprüfen Sie Ihre Anwendung, wenn sie nicht wie erwartet funktioniert. – rustyx

+0

Es gibt ein etwas unklares '/ LARGEADDRESSAWARE'-Flag, das dem Betriebssystem mitteilt, dass Sie mit Zeigern umgehen können, deren oberes Bit auf' 1' gesetzt ist. Dies ergibt ~ 4GB Speicher, vorausgesetzt, Sie führen Ihren 32-Bit-Prozess auf einem 64-Bit-Betriebssystem aus. In C++ ist es sehr sicher, da C++ keine Annahmen über dieses Bit macht. Aber nativer x64-Code bietet Ihnen mehr als 4 GB Speicher. – MSalters

Antwort

4

Es gibt keine solche Beschränkung, das ist wahrscheinlich Ihr Code (oder eine Bibliothek, die Sie verwenden) verwendet genau 2 GB RAM.

Wenn Sie versuchen, mehr als 2 GB Speicher in x86-Anwendung zuweisen - Sie erhalten std :: bad_alloc Ausnahme, da OS kann nicht mehr bieten, trotz, dass Sie 14 GB mehr freien Speicher haben.

Sehr einfaches Programm in MSVC2015 als x64 kompiliert, wie folgt aus:

for (int i = 0; i < 4000000; ++i) { 
    char* ch = new char[1024]; 
} 

4 GB RAM isst, und keine Begrenzung wird durch Standardkonfiguration auferlegt.

+0

Danke! Dieser Code verhielt sich wie gesagt - Ausnahme mit 'x86' und 4GB mit' x64'. In meinem Code verwende ich OpenCV, Cuda und Intel TBB. Kennst du irgendwelche Grenzen? – black

+0

@black keine Ahnung, Sie müssen separat für jede Bibliothek überprüfen. – Starl1ght