View Full Version : [C/C++] Visual Studio Out of Meomory
graffio83
04-02-2016, 09:08
Ciao a tutti,
ho un problema strano...
Sono su Visual Studio 2010, sto scrivendo un sw in C e uso .net/windows Form.
ho una variabile locale sin ora grande
x[36*2048*2048]
e fin qui nessun problema, ora questa variabile è diventata
x[72*2048*2048]
Se compilo l'applicazione parte e funziona perfettamente ma se chiudo Visual e lo riapro, quando provo a modificare un Form mi appare il popup
generata eccezione di tipo 'system.outofmemoryexception'
Per risolvere devo pulire la soluzione, chiudere e riparire Visual Studio.
Se ricompilo, chiudo e riapro visual studio ho nuovamente il problema.
Qualcuno ha idea di come si possa risolvere?
Grazie
graffio83
04-02-2016, 09:32
se sono interi stai allocando 1.2 GB sullo stack presumo... dovresti controllare le opzioni che riguardano la memoria ma non sono esperto di vs2010
Sono float quindi si sono 1.2GB
ma da quello che ho capito VisualStudio non ha la memoria massima da allocare ma solo la riservata.
in questo momento ho 15GB di memoria liberi e quindi non dovrebbero esserci problemi del genere.
La cosa strana è che l'errore lo da l'editor di Visual studio mentre il compilatore, il linker e il mio sowtware non battono ciglio!
Non so se serve specificare ma sto compilando a 64Bit
graffio83
04-02-2016, 17:46
stai allocando in RAM quindi che tu abbia 15 GB di memoria libera su hard disk e' ininfluente. Non e' compito del linker o del compilatore segnalare un out of memory, dato che e' qualcosa che si puo' verificare a run time. Ma al di fuori di VIsual Studio l'eseguibile gira? Sono abbastanza fiducioso che sia un problema di memoria massima allocata per il processo di Visual Studio...
Si, questo è chiaro, ho 14.5GB di RAM liberi
Immagino tu stia su un sistema a 64 bit...
Ma non ho capito, stai programmando in C o stai usando .NET?
In generale il sistema operativo limita la dimensione dello stack di un processo.
Ad esempio sotto Linux di default lo stack è 8 Megabytes.
Ti conviene usare l'heap usando malloc e simili.
graffio83
04-02-2016, 22:03
Immagino tu stia su un sistema a 64 bit...
Ma non ho capito, stai programmando in C o stai usando .NET?
In generale il sistema operativo limita la dimensione dello stack di un processo.
Ad esempio sotto Linux di default lo stack è 8 Megabytes.
Ti conviene usare l'heap usando malloc e simili.
Alla fine ho fatto la malloc,
quello che mi lascia perplesso è il tipo di errore, quando supero le dimensioni dello stack di solito o mi da errore il linker o l'applicazione in se.
Stavolta crashava visual studio.
l'ho trovato strano...
tomminno
05-02-2016, 13:12
C e .Net insieme?
E' abbastanza strano che vada in crash visual studio sulla modifica di una parte .Net se l'out of memory ce l'hai sulla parte C, a meno che per qualche strano motivo non venga caricato in memoria durante la visualizzazione del WinForm.
Comunque Visual Studio è un processo a 32 bit quindi al massimo può allocare 4GB di ram indipendentemente dalla RAM disponibile sul sistema.
PS Dimenticavo un programma .Net a 32bit che gira su un OS a 64bit dà Out of Memory Exception sopra i 2,8GB allocati.
C e .Net insieme?
E' abbastanza strano che vada in crash visual studio sulla modifica di una parte .Net se l'out of memory ce l'hai sulla parte C, a meno che per qualche strano motivo non venga caricato in memoria durante la visualizzazione del WinForm.
Comunque Visual Studio è un processo a 32 bit quindi al massimo può allocare 4GB di ram indipendentemente dalla RAM disponibile sul sistema.
PS Dimenticavo un programma .Net a 32bit che gira su un OS a 64bit dà Out of Memory Exception sopra i 2,8GB allocati.
se hai un sistema operativo a 32 bit mi pare che il limite per singolo processo sia 2 GB circa e 3 e qualcosa per l'intera macchina
cdimauro
05-02-2016, 16:34
Non esattamente (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx).
Non esattamente (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx).
Beh sembra confermare quanto detto da !fazz:
User-mode virtual address space for each 32-bit process
2 GB
Up to 3 GB with IMAGE_FILE_LARGE_ADDRESS_AWARE and 4GT
O meglio: per l'intera macchina sono 4GB, se era quello che intendevi ;).
cdimauro
05-02-2016, 16:53
Sì, esatto. Puoi arrivare a 3GB per applicazione, e 4GB in tutto.
graffio83
08-02-2016, 06:55
Sì, esatto. Puoi arrivare a 3GB per applicazione, e 4GB in tutto.
Sono su sistema operativo a 64 e la app è a 64.
Il dubbio è se VS gira a 64 o 32.
In ogni caso non riesco a giustificare il crash della parte .net cambiando un allocazione lato C...
Sono su sistema operativo a 64 e la app è a 64.
Il dubbio è se VS gira a 64 o 32.
In ogni caso non riesco a giustificare il crash della parte .net cambiando un allocazione lato C...
Credo che Visual Studio sia a 32-bit.
tomminno
08-02-2016, 07:47
Visual Studio è a 32 bit.
cdimauro
08-02-2016, 16:22
Sono su sistema operativo a 64 e la app è a 64.
Il dubbio è se VS gira a 64 o 32.
In ogni caso non riesco a giustificare il crash della parte .net cambiando un allocazione lato C...
E' strano, perché con app a 64bit il limite è di 8TB. Non ho idea di quale potrebbe essere il problema.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.