Domanda

Ho un'applicazione che alloca memoria con 'nuovo' e li libera con 'delete' in alcune parti del codice. Il problema è che ogni volta che supera il limite di memoria del sistema (diciamo 2GB), Windows invia un segnale KILL al processo. Penso che non è usuale in quanto si deve utilizzare lo spazio di swap (penso in finestre si chiama memoria virtuale), giusto? La mia domanda è scritto in C ++ / Visual Studio.

È stato utile?

Soluzione

Ecco come si può fare fino a 3GB per un processo; Questo è il massimo assoluto si può avere per 32 applicazioni Windows bit. Altro che quello e si sta andando ad avere bisogno di utilizzare una versione a 64 bit di Windows.

Questo è un sacco di memoria. forse si potrebbe pensare di dividere la vostra applicazione in più processi e comunicare tra di loro.

Altri suggerimenti

Il sistema operativo non uccide la vostra applicazione, un'eccezione non gestita fa. Si vuole esaminare la vostra app con perfmon, e guardare questi contatori, working set, Byte virtuali, Byte privati. Otterrete eccezioni quando i byte riservati si avvicina a 2GB. Così i vostri byte vincolati e byte di RAM sono molto meno.

Ecco un bell'articolo su Spazio indirizzo virtuale, tra cui commesso vs riservato.

La morale della storia, non cercare di allocare quando i byte riservati si avvicina a 2 GB, per un processo a 32 bit.

Windows non utilizza segnali. Si dovrebbe ottenere l'eccezione std :: badalloc quando si esaurisce la memoria. Il che, se non rilevata, verrà eseguito automaticamente la funzione terminate (). L'eccezione è visibile nella finestra di output.

non ho guardato troppo da vicino a questo, ma si possono trovare le risposte desiderate qui:

si può allocare un grande pezzo unico di memoria (> 4GB) in C o C ++?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top