domanda di allocazione della memoria c ++
-
07-07-2019 - |
Domanda
Sto cercando di creare un array:
int HR [32487834];
questo non occupa solo circa 128 - 130 megabyte di memoria?
sto usando MS c ++ Visual Studios 2005 SP1 e si arresta in modo anomalo e mi dice di overflow dello stack.
Soluzione
Anche se il tuo computer potrebbe avere gigabyte di memoria, lo stack no (per impostazione predefinita, penso che sia ~ 1 MB su Windows, ma puoi ingrandirlo).
Prova ad assegnarlo sull'heap con new []
.
Altri suggerimenti
Usa un vettore: i dati dell'array verranno posizionati nell'heap, mentre l'array verrà comunque ripulito automaticamente quando si esce dalla funzione o dal blocco:
std::vector<int> HR( 32487834);
Lo stack non è così grande per impostazione predefinita. Puoi impostare le dimensioni dello stack con / F switch del compilatore .
Senza questa opzione la dimensione dello stack il valore predefinito è 1 MB. L'argomento numero può essere in decimale o in linguaggio C. notazione. L'argomento può variare da 1 alla dimensione massima dello stack accettata dal linker. Il linker arrotonda per eccesso il valore specificato al 4 più vicino byte. Lo spazio tra / F e numero è facoltativo.
Puoi anche utilizzare / opzione linker STACK per eseguibili
Ma probabilmente dovresti dividere il problema in parti invece di fare tutto in una volta. Hai davvero bisogno di tutta quella memoria tutta in una volta?
Di solito è possibile allocare più memoria sull'heap che anche sullo stack.